@dynamic-labs/sdk-react-core 1.4.2 → 1.4.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 (82) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/package.cjs +1 -1
  3. package/package.js +1 -1
  4. package/package.json +11 -11
  5. package/src/index.cjs +13 -13
  6. package/src/index.d.ts +289 -9
  7. package/src/lib/components/DynamicFooter/DynamicFooter.cjs +8 -1
  8. package/src/lib/components/DynamicFooter/DynamicFooter.js +8 -1
  9. package/src/lib/components/Toolkit/Toolkit.cjs +2 -3
  10. package/src/lib/components/Toolkit/Toolkit.js +2 -3
  11. package/src/lib/components/Toolkit/components/index.d.ts +0 -1
  12. package/src/lib/context/DynamicContext/DynamicContext.cjs +28 -33
  13. package/src/lib/context/DynamicContext/DynamicContext.js +30 -35
  14. package/src/lib/context/DynamicContext/handleDisconnectWallet/handleDisconnectWallet.cjs +1 -4
  15. package/src/lib/context/DynamicContext/handleDisconnectWallet/handleDisconnectWallet.d.ts +1 -7
  16. package/src/lib/context/DynamicContext/handleDisconnectWallet/handleDisconnectWallet.js +1 -4
  17. package/src/lib/context/DynamicContext/helpers/helpers.cjs +2 -2
  18. package/src/lib/context/DynamicContext/helpers/helpers.d.ts +2 -2
  19. package/src/lib/context/DynamicContext/helpers/helpers.js +2 -2
  20. package/src/lib/context/DynamicContext/hooks/index.d.ts +1 -0
  21. package/src/lib/context/DynamicContext/hooks/useHandleLogout/types.d.ts +1 -3
  22. package/src/lib/context/DynamicContext/hooks/useHandleLogout/useHandleLogout.cjs +1 -5
  23. package/src/lib/context/DynamicContext/hooks/useHandleLogout/useHandleLogout.js +2 -6
  24. package/src/lib/context/DynamicContext/hooks/useMultiWallet/useMultiWallet.cjs +15 -0
  25. package/src/lib/context/DynamicContext/hooks/useMultiWallet/useMultiWallet.d.ts +6 -0
  26. package/src/lib/context/DynamicContext/hooks/useMultiWallet/useMultiWallet.js +11 -0
  27. package/src/lib/context/DynamicContext/hooks/useSetShowLinkNewWalletModal/useSetShowLinkNewWalletModal.cjs +1 -1
  28. package/src/lib/context/DynamicContext/hooks/useSetShowLinkNewWalletModal/useSetShowLinkNewWalletModal.js +1 -1
  29. package/src/lib/context/DynamicContext/types/index.d.ts +9 -3
  30. package/src/lib/context/DynamicContext/useCustomerCallbacks/useCustomerCallbacks.cjs +4 -2
  31. package/src/lib/context/DynamicContext/useCustomerCallbacks/useCustomerCallbacks.js +4 -2
  32. package/src/lib/context/LoadingContext/LoadingContext.cjs +1 -0
  33. package/src/lib/context/LoadingContext/LoadingContext.js +1 -0
  34. package/src/lib/data/api.cjs +3 -0
  35. package/src/lib/data/api.js +4 -1
  36. package/src/lib/layout/DynamicAuthLayout/DynamicAuthLayout.cjs +1 -1
  37. package/src/lib/layout/DynamicAuthLayout/DynamicAuthLayout.js +1 -1
  38. package/src/lib/main.global.cjs +1 -1
  39. package/src/lib/main.global.js +1 -1
  40. package/src/lib/shared/utils/hooks/usePreventPageScroll/usePreventPageScroll.cjs +0 -10
  41. package/src/lib/shared/utils/hooks/usePreventPageScroll/usePreventPageScroll.js +0 -10
  42. package/src/lib/styles/index.shadow.cjs +1 -1
  43. package/src/lib/styles/index.shadow.js +1 -1
  44. package/src/lib/utils/constants/index.d.ts +1 -1
  45. package/src/lib/utils/constants/localStorage.cjs +2 -4
  46. package/src/lib/utils/constants/localStorage.d.ts +1 -2
  47. package/src/lib/utils/constants/localStorage.js +2 -3
  48. package/src/lib/utils/functions/walletListBuilder/utils/getCalculatedOffset/getCalculatedOffset.cjs +9 -4
  49. package/src/lib/utils/functions/walletListBuilder/utils/getCalculatedOffset/getCalculatedOffset.js +9 -4
  50. package/src/lib/utils/functions/walletListBuilder/walletListBuilder.cjs +24 -15
  51. package/src/lib/utils/functions/walletListBuilder/walletListBuilder.d.ts +13 -0
  52. package/src/lib/utils/functions/walletListBuilder/walletListBuilder.js +24 -16
  53. package/src/lib/utils/hooks/authenticationHooks/useConnectAndSignSplitSteps/useConnectAndSignSplitSteps.cjs +16 -1
  54. package/src/lib/utils/hooks/authenticationHooks/useConnectAndSignSplitSteps/useConnectAndSignSplitSteps.js +16 -1
  55. package/src/lib/utils/hooks/index.d.ts +1 -0
  56. package/src/lib/utils/hooks/useAuthLayoutChecks/useAuthLayoutChecks.cjs +6 -1
  57. package/src/lib/utils/hooks/useAuthLayoutChecks/useAuthLayoutChecks.d.ts +1 -0
  58. package/src/lib/utils/hooks/useAuthLayoutChecks/useAuthLayoutChecks.js +6 -1
  59. package/src/lib/utils/hooks/useConnectWallet/useConnectWallet.cjs +2 -6
  60. package/src/lib/utils/hooks/useConnectWallet/useConnectWallet.d.ts +2 -3
  61. package/src/lib/utils/hooks/useConnectWallet/useConnectWallet.js +2 -6
  62. package/src/lib/utils/hooks/useHandleWalletsToConnect/useHandleWalletsToConnect.cjs +4 -5
  63. package/src/lib/utils/hooks/useHandleWalletsToConnect/useHandleWalletsToConnect.js +4 -5
  64. package/src/lib/utils/hooks/useNetworkNotSupported/index.d.ts +1 -0
  65. package/src/lib/utils/hooks/useNetworkNotSupported/useNetworkNotSupported.cjs +104 -0
  66. package/src/lib/utils/hooks/useNetworkNotSupported/useNetworkNotSupported.d.ts +3 -0
  67. package/src/lib/utils/hooks/useNetworkNotSupported/useNetworkNotSupported.js +100 -0
  68. package/src/lib/utils/hooks/useUserDataForm/useUserDataForm.cjs +5 -0
  69. package/src/lib/utils/hooks/useUserDataForm/useUserDataForm.js +6 -1
  70. package/src/lib/views/NetworkNotSupported/NetworkNotSupported.cjs +9 -31
  71. package/src/lib/views/NetworkNotSupported/NetworkNotSupported.js +10 -32
  72. package/src/lib/views/NetworkNotSupportedSwitchManual/NetworkNotSupportedSwitchManual.cjs +8 -31
  73. package/src/lib/views/NetworkNotSupportedSwitchManual/NetworkNotSupportedSwitchManual.js +8 -31
  74. package/src/lib/widgets/DynamicEmbeddedWidget/DynamicEmbeddedAuthFlow/DynamicEmbeddedAuthFlow.cjs +11 -1
  75. package/src/lib/widgets/DynamicEmbeddedWidget/DynamicEmbeddedAuthFlow/DynamicEmbeddedAuthFlow.js +11 -1
  76. package/src/lib/components/Toolkit/components/MultiWalletSwitch.cjs +0 -18
  77. package/src/lib/components/Toolkit/components/MultiWalletSwitch.d.ts +0 -6
  78. package/src/lib/components/Toolkit/components/MultiWalletSwitch.js +0 -14
  79. package/src/lib/utils/hooks/multiWallet/useMultiWallet/useMultiWallet.cjs +0 -39
  80. package/src/lib/utils/hooks/multiWallet/useMultiWallet/useMultiWallet.d.ts +0 -9
  81. package/src/lib/utils/hooks/multiWallet/useMultiWallet/useMultiWallet.js +0 -35
  82. /package/src/lib/{utils/hooks/multiWallet → context/DynamicContext/hooks}/useMultiWallet/index.d.ts +0 -0
@@ -1,13 +1,18 @@
1
+ import '../../../../constants/colors.js';
2
+ import { DEFAULT_NUMBER_OF_WALLETS_TO_SHOW } from '../../../../constants/values.js';
1
3
  import { findLastPriorityIndex } from '../findLastWalletIndex/findLastPriorityIndex.js';
2
4
 
3
5
  const getCalculatedOffset = ({ hasWalletFilter, defaultOffset, list, priorityList, }) => {
4
6
  const lastPriorityIndex = findLastPriorityIndex(list, priorityList);
5
- if (hasWalletFilter ||
6
- list.length <= defaultOffset ||
7
- lastPriorityIndex === -1) {
7
+ if (defaultOffset === DEFAULT_NUMBER_OF_WALLETS_TO_SHOW &&
8
+ !hasWalletFilter &&
9
+ list.length > defaultOffset &&
10
+ lastPriorityIndex !== -1) {
11
+ return lastPriorityIndex + 1;
12
+ }
13
+ else {
8
14
  return defaultOffset;
9
15
  }
10
- return lastPriorityIndex + 1;
11
16
  };
12
17
 
13
18
  export { getCalculatedOffset };
@@ -86,8 +86,10 @@ const walletListBuilder = ({ authMode, connectedWallets, multiWallet, numberOfWa
86
86
  const finalizedWalletList = groupWallets
87
87
  ? groupWalletOptions.groupWalletOptions(walletBook, walletsList)
88
88
  : walletsList;
89
+ // If a filter has been applied we want to add an offset to the number of wallets
90
+ // to include the installed and last used wallets
89
91
  const updatedNumberOfWalletsToShow = showMoreWalletsWithFilter && hasWalletFilter
90
- ? calculateWithFilterNumberOfWalletsToShow(orderedInputList, firstPriorityWallets.concat(installedWallets), numberOfWalletsToShow)
92
+ ? calculateWalletOffsetBasedOnInstalledAndLastUsedWallets(orderedInputList, firstPriorityWallets.concat(installedWallets), numberOfWalletsToShow)
91
93
  : numberOfWalletsToShow;
92
94
  return {
93
95
  numberOfWallets: walletsList.length,
@@ -104,17 +106,24 @@ const orderAndFilterList = (walletList, walletsFilter, isWalletConnectList) => {
104
106
  return sortedInputList(walletList);
105
107
  }
106
108
  };
109
+ const KEEP_WALLETS_NAME_LIST = ['wallet connect'];
107
110
  const applySearchFilterToWalletOptionList = (rawSearchFilter, walletOptionList) => {
108
111
  const searchFilter = rawSearchFilter.trim().toLowerCase();
109
- const cleanName = (name) => name
110
- .trim()
111
- .toLowerCase()
112
- .replace('wallet', '')
113
- .replace('evm', '')
114
- .replace('starknet', '')
115
- .replace('solana', '')
116
- .replace('flow', '')
117
- .replace('bitcoin', '');
112
+ const cleanName = (name) => {
113
+ const trimmedLowerName = name.trim().toLowerCase();
114
+ if (KEEP_WALLETS_NAME_LIST.includes(trimmedLowerName)) {
115
+ return trimmedLowerName;
116
+ }
117
+ else {
118
+ return trimmedLowerName
119
+ .replace('wallet', '')
120
+ .replace('evm', '')
121
+ .replace('starknet', '')
122
+ .replace('solana', '')
123
+ .replace('flow', '')
124
+ .replace('bitcoin', '');
125
+ }
126
+ };
118
127
  return walletOptionList.filter((walletOption) => {
119
128
  var _a;
120
129
  return cleanName(walletOption.name).includes(searchFilter) ||
@@ -145,19 +154,18 @@ const listToDisplay = (finalizedList, searchFilter, isWalletConnectList, numberO
145
154
  }
146
155
  };
147
156
  /**
148
- * When a filter is applied we would like to show the installed + last used wallets
149
- * in addition to the wallets that the filter has specified.
150
157
  * This calculation adds an offset to numberOfWalletsToShow so we will show the
151
158
  * intended wallets + installed and last used.
159
+ * We should would only apply the additonal offset if the installed wallets was not in the original list.
152
160
  *
153
161
  * For example:
154
162
  * we want to show 4 wallets: ['metamask', 'rainbow', 'walletconnect', 'coinbase']
155
163
  * and someone is using brave with installed phantom he should see
156
164
  * [ 'brave injected', phantom ,'metamask', 'rainbow', 'walletconnect', 'coinbase',]
157
- *
158
- * note — this should only apply to the WalletList view!
165
+ * And when someone is using metamask and coinbase they should see
166
+ * [ 'metamask', 'coinbase', 'rainbow', 'walletconnect']
159
167
  */
160
- const calculateWithFilterNumberOfWalletsToShow = (allWalletsOrdered, installedOrUsedWallets, numberOfWalletsToShow) => {
168
+ const calculateWalletOffsetBasedOnInstalledAndLastUsedWallets = (allWalletsOrdered, installedOrUsedWallets, numberOfWalletsToShow) => {
161
169
  const filteredWallets = allWalletsOrdered.slice(0, numberOfWalletsToShow);
162
170
  const offset = installedOrUsedWallets.filter((wallet) => !filteredWallets.includes(wallet)).length;
163
171
  return numberOfWalletsToShow + offset;
@@ -177,4 +185,5 @@ const getSignWithEmailWallet = (signWithEmailWalletName, inputList) => {
177
185
 
178
186
  exports.PRIORITY_WALLET_LIST = PRIORITY_WALLET_LIST;
179
187
  exports.SIGN_IN_WITH_EMAIL_WALLET_NAME = SIGN_IN_WITH_EMAIL_WALLET_NAME;
188
+ exports.calculateWalletOffsetBasedOnInstalledAndLastUsedWallets = calculateWalletOffsetBasedOnInstalledAndLastUsedWallets;
180
189
  exports.walletListBuilder = walletListBuilder;
@@ -23,4 +23,17 @@ type BuilderResult = {
23
23
  export declare const PRIORITY_WALLET_LIST: string[];
24
24
  export declare const SIGN_IN_WITH_EMAIL_WALLET_NAME = "Sign In With Email";
25
25
  export declare const walletListBuilder: ({ authMode, connectedWallets, multiWallet, numberOfWalletsToShow, inputList, isWalletConnectList, lastUsedWalletKey, signWithEmailWalletName, searchFilter, walletsFilter, loginWithEmail, groupWallets, walletBook, showMoreWalletsWithFilter, }: BuilderParams) => BuilderResult;
26
+ /**
27
+ * This calculation adds an offset to numberOfWalletsToShow so we will show the
28
+ * intended wallets + installed and last used.
29
+ * We should would only apply the additonal offset if the installed wallets was not in the original list.
30
+ *
31
+ * For example:
32
+ * we want to show 4 wallets: ['metamask', 'rainbow', 'walletconnect', 'coinbase']
33
+ * and someone is using brave with installed phantom he should see
34
+ * [ 'brave injected', phantom ,'metamask', 'rainbow', 'walletconnect', 'coinbase',]
35
+ * And when someone is using metamask and coinbase they should see
36
+ * [ 'metamask', 'coinbase', 'rainbow', 'walletconnect']
37
+ */
38
+ export declare const calculateWalletOffsetBasedOnInstalledAndLastUsedWallets: (allWalletsOrdered: WalletOption[], installedOrUsedWallets: WalletOption[], numberOfWalletsToShow: number) => number;
26
39
  export {};
@@ -82,8 +82,10 @@ const walletListBuilder = ({ authMode, connectedWallets, multiWallet, numberOfWa
82
82
  const finalizedWalletList = groupWallets
83
83
  ? groupWalletOptions(walletBook, walletsList)
84
84
  : walletsList;
85
+ // If a filter has been applied we want to add an offset to the number of wallets
86
+ // to include the installed and last used wallets
85
87
  const updatedNumberOfWalletsToShow = showMoreWalletsWithFilter && hasWalletFilter
86
- ? calculateWithFilterNumberOfWalletsToShow(orderedInputList, firstPriorityWallets.concat(installedWallets), numberOfWalletsToShow)
88
+ ? calculateWalletOffsetBasedOnInstalledAndLastUsedWallets(orderedInputList, firstPriorityWallets.concat(installedWallets), numberOfWalletsToShow)
87
89
  : numberOfWalletsToShow;
88
90
  return {
89
91
  numberOfWallets: walletsList.length,
@@ -100,17 +102,24 @@ const orderAndFilterList = (walletList, walletsFilter, isWalletConnectList) => {
100
102
  return sortedInputList(walletList);
101
103
  }
102
104
  };
105
+ const KEEP_WALLETS_NAME_LIST = ['wallet connect'];
103
106
  const applySearchFilterToWalletOptionList = (rawSearchFilter, walletOptionList) => {
104
107
  const searchFilter = rawSearchFilter.trim().toLowerCase();
105
- const cleanName = (name) => name
106
- .trim()
107
- .toLowerCase()
108
- .replace('wallet', '')
109
- .replace('evm', '')
110
- .replace('starknet', '')
111
- .replace('solana', '')
112
- .replace('flow', '')
113
- .replace('bitcoin', '');
108
+ const cleanName = (name) => {
109
+ const trimmedLowerName = name.trim().toLowerCase();
110
+ if (KEEP_WALLETS_NAME_LIST.includes(trimmedLowerName)) {
111
+ return trimmedLowerName;
112
+ }
113
+ else {
114
+ return trimmedLowerName
115
+ .replace('wallet', '')
116
+ .replace('evm', '')
117
+ .replace('starknet', '')
118
+ .replace('solana', '')
119
+ .replace('flow', '')
120
+ .replace('bitcoin', '');
121
+ }
122
+ };
114
123
  return walletOptionList.filter((walletOption) => {
115
124
  var _a;
116
125
  return cleanName(walletOption.name).includes(searchFilter) ||
@@ -141,19 +150,18 @@ const listToDisplay = (finalizedList, searchFilter, isWalletConnectList, numberO
141
150
  }
142
151
  };
143
152
  /**
144
- * When a filter is applied we would like to show the installed + last used wallets
145
- * in addition to the wallets that the filter has specified.
146
153
  * This calculation adds an offset to numberOfWalletsToShow so we will show the
147
154
  * intended wallets + installed and last used.
155
+ * We should would only apply the additonal offset if the installed wallets was not in the original list.
148
156
  *
149
157
  * For example:
150
158
  * we want to show 4 wallets: ['metamask', 'rainbow', 'walletconnect', 'coinbase']
151
159
  * and someone is using brave with installed phantom he should see
152
160
  * [ 'brave injected', phantom ,'metamask', 'rainbow', 'walletconnect', 'coinbase',]
153
- *
154
- * note — this should only apply to the WalletList view!
161
+ * And when someone is using metamask and coinbase they should see
162
+ * [ 'metamask', 'coinbase', 'rainbow', 'walletconnect']
155
163
  */
156
- const calculateWithFilterNumberOfWalletsToShow = (allWalletsOrdered, installedOrUsedWallets, numberOfWalletsToShow) => {
164
+ const calculateWalletOffsetBasedOnInstalledAndLastUsedWallets = (allWalletsOrdered, installedOrUsedWallets, numberOfWalletsToShow) => {
157
165
  const filteredWallets = allWalletsOrdered.slice(0, numberOfWalletsToShow);
158
166
  const offset = installedOrUsedWallets.filter((wallet) => !filteredWallets.includes(wallet)).length;
159
167
  return numberOfWalletsToShow + offset;
@@ -171,4 +179,4 @@ const getSignWithEmailWallet = (signWithEmailWalletName, inputList) => {
171
179
  return walletOverride;
172
180
  };
173
181
 
174
- export { PRIORITY_WALLET_LIST, SIGN_IN_WITH_EMAIL_WALLET_NAME, walletListBuilder };
182
+ export { PRIORITY_WALLET_LIST, SIGN_IN_WITH_EMAIL_WALLET_NAME, calculateWalletOffsetBasedOnInstalledAndLastUsedWallets, walletListBuilder };
@@ -23,6 +23,8 @@ require('../../../../shared/consts/index.cjs');
23
23
  require('../../../../events/dynamicEvents.cjs');
24
24
  var ErrorContext = require('../../../../context/ErrorContext/ErrorContext.cjs');
25
25
  require('@dynamic-labs/multi-wallet');
26
+ var isProgrammableNetworkSwitchSupported = require('../../../functions/isProgrammableNetworkSwitchSupported/isProgrammableNetworkSwitchSupported.cjs');
27
+ var isSupportedNetwork = require('../../../functions/isSupportedNetwork/isSupportedNetwork.cjs');
26
28
  require('viem/chains');
27
29
  var useHandleWalletsToConnect = require('../../useHandleWalletsToConnect/useHandleWalletsToConnect.cjs');
28
30
  var useVerifyWallet = require('../../useVerifyWallet/useVerifyWallet.cjs');
@@ -80,7 +82,7 @@ const useConnectAndSignSplitSteps = () => {
80
82
  const { setView, goToInitialView } = ViewContext.useViewContext();
81
83
  const { setErrorMessage } = ErrorContext.useErrorContext();
82
84
  const { getCaptchaToken, engageCaptcha } = CaptchaContext.useCaptchaContext();
83
- const { connectWallet, consumeNonce, displaySiweStatement, projectSettings, environmentId, setIsSingleWalletAccount, setShowAuthFlow, user, authMode, setIsVerificationInProgress, } = useInternalDynamicContext.useInternalDynamicContext();
85
+ const { connectWallet, consumeNonce, displaySiweStatement, projectSettings, environmentId, networkValidationMode, setIsSingleWalletAccount, setShowAuthFlow, user, authMode, setIsVerificationInProgress, } = useInternalDynamicContext.useInternalDynamicContext();
84
86
  const { handleWalletsToConnect } = useHandleWalletsToConnect.useHandleWalletsToConnect();
85
87
  const verifyWallet = useVerifyWallet.useVerifyWallet({
86
88
  consumeNonce,
@@ -149,6 +151,19 @@ const useConnectAndSignSplitSteps = () => {
149
151
  if (!(connectionResult === null || connectionResult === void 0 ? void 0 : connectionResult.address)) {
150
152
  return;
151
153
  }
154
+ const walletNetwork = yield walletConnector.getNetwork();
155
+ const usesSupportedNetwork = isSupportedNetwork.isSupportedNetwork({
156
+ network: walletNetwork,
157
+ walletConnector,
158
+ });
159
+ const isNetworkValidationEnabledForSignIn = networkValidationMode === 'always' ||
160
+ networkValidationMode === 'sign-in';
161
+ if (!usesSupportedNetwork && isNetworkValidationEnabledForSignIn) {
162
+ if (!isProgrammableNetworkSwitchSupported.isProgrammableNetworkSwitchSupported(walletConnector)) {
163
+ return setView('network-not-supported-manual');
164
+ }
165
+ return setView('network-not-supported');
166
+ }
152
167
  yield verifyWallet({
153
168
  captchaToken: getCaptchaToken(),
154
169
  publicWalletAddress: connectionResult.address,
@@ -19,6 +19,8 @@ import '../../../../shared/consts/index.js';
19
19
  import '../../../../events/dynamicEvents.js';
20
20
  import { useErrorContext } from '../../../../context/ErrorContext/ErrorContext.js';
21
21
  import '@dynamic-labs/multi-wallet';
22
+ import { isProgrammableNetworkSwitchSupported } from '../../../functions/isProgrammableNetworkSwitchSupported/isProgrammableNetworkSwitchSupported.js';
23
+ import { isSupportedNetwork } from '../../../functions/isSupportedNetwork/isSupportedNetwork.js';
22
24
  import 'viem/chains';
23
25
  import { useHandleWalletsToConnect } from '../../useHandleWalletsToConnect/useHandleWalletsToConnect.js';
24
26
  import { useVerifyWallet } from '../../useVerifyWallet/useVerifyWallet.js';
@@ -76,7 +78,7 @@ const useConnectAndSignSplitSteps = () => {
76
78
  const { setView, goToInitialView } = useViewContext();
77
79
  const { setErrorMessage } = useErrorContext();
78
80
  const { getCaptchaToken, engageCaptcha } = useCaptchaContext();
79
- const { connectWallet, consumeNonce, displaySiweStatement, projectSettings, environmentId, setIsSingleWalletAccount, setShowAuthFlow, user, authMode, setIsVerificationInProgress, } = useInternalDynamicContext();
81
+ const { connectWallet, consumeNonce, displaySiweStatement, projectSettings, environmentId, networkValidationMode, setIsSingleWalletAccount, setShowAuthFlow, user, authMode, setIsVerificationInProgress, } = useInternalDynamicContext();
80
82
  const { handleWalletsToConnect } = useHandleWalletsToConnect();
81
83
  const verifyWallet = useVerifyWallet({
82
84
  consumeNonce,
@@ -145,6 +147,19 @@ const useConnectAndSignSplitSteps = () => {
145
147
  if (!(connectionResult === null || connectionResult === void 0 ? void 0 : connectionResult.address)) {
146
148
  return;
147
149
  }
150
+ const walletNetwork = yield walletConnector.getNetwork();
151
+ const usesSupportedNetwork = isSupportedNetwork({
152
+ network: walletNetwork,
153
+ walletConnector,
154
+ });
155
+ const isNetworkValidationEnabledForSignIn = networkValidationMode === 'always' ||
156
+ networkValidationMode === 'sign-in';
157
+ if (!usesSupportedNetwork && isNetworkValidationEnabledForSignIn) {
158
+ if (!isProgrammableNetworkSwitchSupported(walletConnector)) {
159
+ return setView('network-not-supported-manual');
160
+ }
161
+ return setView('network-not-supported');
162
+ }
148
163
  yield verifyWallet({
149
164
  captchaToken: getCaptchaToken(),
150
165
  publicWalletAddress: connectionResult.address,
@@ -44,3 +44,4 @@ export { useWalletConnectorNetwork } from './useWalletConnectorNetwork';
44
44
  export { useInitEmbeddedWalletAuthMethod } from './useInitEmbeddedWalletAuthMethod';
45
45
  export { useEmbeddedWalletAuthenticator } from './useEmbeddedWalletAuthenticator';
46
46
  export { useViewSettings } from './useViewSettings';
47
+ export { useNetworkNotSupported } from './useNetworkNotSupported';
@@ -142,7 +142,10 @@ const useAuthLayoutChecks = () => {
142
142
  privacyPolicyUrl ||
143
143
  customPrivacyPolicy ||
144
144
  customTermsOfServices))));
145
- const showDynamicFooter = view.type === 'login-with-email-verification' ||
145
+ const showDynamicFooter = view.type === 'login-with-email-or-wallet' ||
146
+ view.type === 'login-with-email-or-wallet-full-wallet-list' ||
147
+ view.type === 'login-with-wallet-only' ||
148
+ view.type === 'login-with-email-verification' ||
146
149
  view.type === 'verify-email' ||
147
150
  view.type === 'pending-connect' ||
148
151
  view.type === 'wallet-group' ||
@@ -176,9 +179,11 @@ const useAuthLayoutChecks = () => {
176
179
  view.type === 'farcaster-connect-view' ||
177
180
  (view.type === 'merge-user-accounts' && !user);
178
181
  const showDefaultFooter = !showConnectedWalletProgress && !showDynamicFooter && !showToSFooter;
182
+ const shouldHideDynamicFooterSeparator = showDynamicFooter && showToSFooter;
179
183
  return {
180
184
  displayBorderBelowHeader,
181
185
  isWalletListTypeView,
186
+ shouldHideDynamicFooterSeparator,
182
187
  showBackButton,
183
188
  showCloseButton,
184
189
  showConnectedWalletProgress,
@@ -1,6 +1,7 @@
1
1
  export declare const useAuthLayoutChecks: () => {
2
2
  displayBorderBelowHeader: boolean;
3
3
  isWalletListTypeView: boolean;
4
+ shouldHideDynamicFooterSeparator: boolean;
4
5
  showBackButton: boolean;
5
6
  showCloseButton: boolean;
6
7
  showConnectedWalletProgress: boolean;
@@ -138,7 +138,10 @@ const useAuthLayoutChecks = () => {
138
138
  privacyPolicyUrl ||
139
139
  customPrivacyPolicy ||
140
140
  customTermsOfServices))));
141
- const showDynamicFooter = view.type === 'login-with-email-verification' ||
141
+ const showDynamicFooter = view.type === 'login-with-email-or-wallet' ||
142
+ view.type === 'login-with-email-or-wallet-full-wallet-list' ||
143
+ view.type === 'login-with-wallet-only' ||
144
+ view.type === 'login-with-email-verification' ||
142
145
  view.type === 'verify-email' ||
143
146
  view.type === 'pending-connect' ||
144
147
  view.type === 'wallet-group' ||
@@ -172,9 +175,11 @@ const useAuthLayoutChecks = () => {
172
175
  view.type === 'farcaster-connect-view' ||
173
176
  (view.type === 'merge-user-accounts' && !user);
174
177
  const showDefaultFooter = !showConnectedWalletProgress && !showDynamicFooter && !showToSFooter;
178
+ const shouldHideDynamicFooterSeparator = showDynamicFooter && showToSFooter;
175
179
  return {
176
180
  displayBorderBelowHeader,
177
181
  isWalletListTypeView,
182
+ shouldHideDynamicFooterSeparator,
178
183
  showBackButton,
179
184
  showCloseButton,
180
185
  showConnectedWalletProgress,
@@ -30,7 +30,7 @@ var isConnectOnly = require('../authenticationHooks/helpers/isConnectOnly.cjs');
30
30
  var dynamicEvents = require('../../../events/dynamicEvents.cjs');
31
31
  var updateUserWalletsFromConnectedWallets = require('./updateUserWalletsFromConnectedWallets/updateUserWalletsFromConnectedWallets.cjs');
32
32
 
33
- const useConnectWallet = ({ authMode, clearPrimaryWalletId, enableVisitTrackingOnConnectOnly, environmentId, primaryWalletId, setPrimaryWalletId, walletConnectorOptions, onDisconnect, onBeforeConnectSuccessConfirmation, removeIsFullyConnected, setShowAuthFlow, isBridgeFlow, setIsVerificationInProgress, user, }) => {
33
+ const useConnectWallet = ({ authMode, clearPrimaryWalletId, enableVisitTrackingOnConnectOnly, environmentId, primaryWalletId, setPrimaryWalletId, walletConnectorOptions, onDisconnect, onBeforeConnectSuccessConfirmation, setShowAuthFlow, isBridgeFlow, setIsVerificationInProgress, user, }) => {
34
34
  const [connectedWalletsInfo, setConnectedWalletsInfo, removeConnectedWalletsInfo,] = useLocalStorage.useLocalStorage(localStorage.CONNECTED_WALLETS_INFO, []);
35
35
  const [connectedWallets, _setConnectedWallets] = React.useState([]);
36
36
  /**
@@ -51,10 +51,7 @@ const useConnectWallet = ({ authMode, clearPrimaryWalletId, enableVisitTrackingO
51
51
  yield (walletToDisconnect === null || walletToDisconnect === void 0 ? void 0 : walletToDisconnect.connector.endSession());
52
52
  const updatedConnectedWalletsInfo = connectedWalletsInfo.filter((wallet) => wallet.id !== walletId);
53
53
  setConnectedWalletsInfo(updatedConnectedWalletsInfo);
54
- if (updatedConnectedWalletsInfo.length === 0) {
55
- removeIsFullyConnected();
56
- }
57
- onDisconnect(updatedConnectedWalletsInfo, walletToDisconnect);
54
+ onDisconnect(walletToDisconnect);
58
55
  if (walletId !== primaryWalletId) {
59
56
  return;
60
57
  }
@@ -72,7 +69,6 @@ const useConnectWallet = ({ authMode, clearPrimaryWalletId, enableVisitTrackingO
72
69
  isBridgeFlow,
73
70
  onDisconnect,
74
71
  primaryWalletId,
75
- removeIsFullyConnected,
76
72
  setConnectedWalletsInfo,
77
73
  setPrimaryWalletId,
78
74
  ]);
@@ -16,9 +16,8 @@ export type UseConnectWalletProps = {
16
16
  primaryWalletId: string | undefined;
17
17
  setPrimaryWalletId: (walletId: string) => void;
18
18
  walletConnectorOptions: WalletOption[];
19
- onDisconnect: (connectedWalletsInfo: ConnectedWalletConnectorType[], wallet?: Wallet) => void;
19
+ onDisconnect: (wallet?: Wallet) => void;
20
20
  onBeforeConnectSuccessConfirmation: OnBeforeConnectSuccessConfirmation | undefined;
21
- removeIsFullyConnected: () => void;
22
21
  setShowAuthFlow: SetShowAuthFlow;
23
22
  isBridgeFlow: boolean;
24
23
  setIsVerificationInProgress: (newValue: boolean, checkWasSetOnDisable?: boolean | undefined) => void;
@@ -42,5 +41,5 @@ type UseConnectWalletValue = {
42
41
  removeConnectedWalletsInfo: () => void;
43
42
  disconnectWallet: (walletId: string) => Promise<void>;
44
43
  };
45
- export declare const useConnectWallet: ({ authMode, clearPrimaryWalletId, enableVisitTrackingOnConnectOnly, environmentId, primaryWalletId, setPrimaryWalletId, walletConnectorOptions, onDisconnect, onBeforeConnectSuccessConfirmation, removeIsFullyConnected, setShowAuthFlow, isBridgeFlow, setIsVerificationInProgress, user, }: UseConnectWalletProps) => UseConnectWalletValue;
44
+ export declare const useConnectWallet: ({ authMode, clearPrimaryWalletId, enableVisitTrackingOnConnectOnly, environmentId, primaryWalletId, setPrimaryWalletId, walletConnectorOptions, onDisconnect, onBeforeConnectSuccessConfirmation, setShowAuthFlow, isBridgeFlow, setIsVerificationInProgress, user, }: UseConnectWalletProps) => UseConnectWalletValue;
46
45
  export {};
@@ -26,7 +26,7 @@ import { isConnectOnly } from '../authenticationHooks/helpers/isConnectOnly.js';
26
26
  import { dynamicEvents } from '../../../events/dynamicEvents.js';
27
27
  import { updateUserWalletsFromConnectedWallets } from './updateUserWalletsFromConnectedWallets/updateUserWalletsFromConnectedWallets.js';
28
28
 
29
- const useConnectWallet = ({ authMode, clearPrimaryWalletId, enableVisitTrackingOnConnectOnly, environmentId, primaryWalletId, setPrimaryWalletId, walletConnectorOptions, onDisconnect, onBeforeConnectSuccessConfirmation, removeIsFullyConnected, setShowAuthFlow, isBridgeFlow, setIsVerificationInProgress, user, }) => {
29
+ const useConnectWallet = ({ authMode, clearPrimaryWalletId, enableVisitTrackingOnConnectOnly, environmentId, primaryWalletId, setPrimaryWalletId, walletConnectorOptions, onDisconnect, onBeforeConnectSuccessConfirmation, setShowAuthFlow, isBridgeFlow, setIsVerificationInProgress, user, }) => {
30
30
  const [connectedWalletsInfo, setConnectedWalletsInfo, removeConnectedWalletsInfo,] = useLocalStorage(CONNECTED_WALLETS_INFO, []);
31
31
  const [connectedWallets, _setConnectedWallets] = useState([]);
32
32
  /**
@@ -47,10 +47,7 @@ const useConnectWallet = ({ authMode, clearPrimaryWalletId, enableVisitTrackingO
47
47
  yield (walletToDisconnect === null || walletToDisconnect === void 0 ? void 0 : walletToDisconnect.connector.endSession());
48
48
  const updatedConnectedWalletsInfo = connectedWalletsInfo.filter((wallet) => wallet.id !== walletId);
49
49
  setConnectedWalletsInfo(updatedConnectedWalletsInfo);
50
- if (updatedConnectedWalletsInfo.length === 0) {
51
- removeIsFullyConnected();
52
- }
53
- onDisconnect(updatedConnectedWalletsInfo, walletToDisconnect);
50
+ onDisconnect(walletToDisconnect);
54
51
  if (walletId !== primaryWalletId) {
55
52
  return;
56
53
  }
@@ -68,7 +65,6 @@ const useConnectWallet = ({ authMode, clearPrimaryWalletId, enableVisitTrackingO
68
65
  isBridgeFlow,
69
66
  onDisconnect,
70
67
  primaryWalletId,
71
- removeIsFullyConnected,
72
68
  setConnectedWalletsInfo,
73
69
  setPrimaryWalletId,
74
70
  ]);
@@ -72,11 +72,11 @@ require('../../../widgets/DynamicWidget/views/ManagePasskeysWidgetView/PasskeyCa
72
72
  var useInternalDynamicContext = require('../../../context/DynamicContext/useDynamicContext/useInternalDynamicContext.cjs');
73
73
 
74
74
  const useHandleWalletsToConnect = () => {
75
- const { bridgeChainsToConnect, setBridgeChainsToConnect, setShowAuthFlow, setIsFullyConnected, isFullyConnected, } = useInternalDynamicContext.useInternalDynamicContext();
75
+ const { bridgeChainsToConnect, setShowAuthFlow, bridgeOnboardingCompleted, setBridgeOnboardingCompleted, } = useInternalDynamicContext.useInternalDynamicContext();
76
76
  const { setView, goToInitialView } = ViewContext.useViewContext();
77
77
  const handleWalletsToConnect = ({ walletConnector, }) => {
78
78
  if (!bridgeChainsToConnect) {
79
- setIsFullyConnected(true);
79
+ setBridgeOnboardingCompleted(true);
80
80
  setShowAuthFlow(false);
81
81
  return;
82
82
  }
@@ -90,11 +90,10 @@ const useHandleWalletsToConnect = () => {
90
90
  return goToInitialView();
91
91
  }
92
92
  const restOfWallets = bridgeChainsToConnect.filter((wallet) => wallet.chain !== (walletConnector === null || walletConnector === void 0 ? void 0 : walletConnector.connectedChain));
93
- setBridgeChainsToConnect(restOfWallets);
94
93
  const allWalletsConnected = restOfWallets.length === 0;
95
94
  if (allWalletsConnected) {
96
- if (!isFullyConnected) {
97
- setIsFullyConnected(true);
95
+ if (!bridgeOnboardingCompleted) {
96
+ setBridgeOnboardingCompleted(true);
98
97
  setView('bridge-summary');
99
98
  }
100
99
  else {
@@ -68,11 +68,11 @@ import '../../../widgets/DynamicWidget/views/ManagePasskeysWidgetView/PasskeyCar
68
68
  import { useInternalDynamicContext } from '../../../context/DynamicContext/useDynamicContext/useInternalDynamicContext.js';
69
69
 
70
70
  const useHandleWalletsToConnect = () => {
71
- const { bridgeChainsToConnect, setBridgeChainsToConnect, setShowAuthFlow, setIsFullyConnected, isFullyConnected, } = useInternalDynamicContext();
71
+ const { bridgeChainsToConnect, setShowAuthFlow, bridgeOnboardingCompleted, setBridgeOnboardingCompleted, } = useInternalDynamicContext();
72
72
  const { setView, goToInitialView } = useViewContext();
73
73
  const handleWalletsToConnect = ({ walletConnector, }) => {
74
74
  if (!bridgeChainsToConnect) {
75
- setIsFullyConnected(true);
75
+ setBridgeOnboardingCompleted(true);
76
76
  setShowAuthFlow(false);
77
77
  return;
78
78
  }
@@ -86,11 +86,10 @@ const useHandleWalletsToConnect = () => {
86
86
  return goToInitialView();
87
87
  }
88
88
  const restOfWallets = bridgeChainsToConnect.filter((wallet) => wallet.chain !== (walletConnector === null || walletConnector === void 0 ? void 0 : walletConnector.connectedChain));
89
- setBridgeChainsToConnect(restOfWallets);
90
89
  const allWalletsConnected = restOfWallets.length === 0;
91
90
  if (allWalletsConnected) {
92
- if (!isFullyConnected) {
93
- setIsFullyConnected(true);
91
+ if (!bridgeOnboardingCompleted) {
92
+ setBridgeOnboardingCompleted(true);
94
93
  setView('bridge-summary');
95
94
  }
96
95
  else {
@@ -0,0 +1 @@
1
+ export { useNetworkNotSupported } from './useNetworkNotSupported';
@@ -0,0 +1,104 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var React = require('react');
6
+ var useWalletConnectorNetwork = require('../useWalletConnectorNetwork/useWalletConnectorNetwork.cjs');
7
+ require('@dynamic-labs/wallet-connector-core');
8
+ require('@dynamic-labs/sdk-api');
9
+ require('../../../shared/logger.cjs');
10
+ require('@dynamic-labs/iconic');
11
+ require('react/jsx-runtime');
12
+ require('../../../context/ViewContext/ViewContext.cjs');
13
+ require('@dynamic-labs/wallet-book');
14
+ require('../../constants/colors.cjs');
15
+ require('../../constants/values.cjs');
16
+ require('../../../shared/utils/classes/storage/localStorage.cjs');
17
+ require('viem');
18
+ require('@dynamic-labs/utils');
19
+ require('../../../shared/consts/index.cjs');
20
+ require('../../../../../_virtual/_tslib.cjs');
21
+ require('@dynamic-labs/multi-wallet');
22
+ var isSupportedNetwork = require('../../functions/isSupportedNetwork/isSupportedNetwork.cjs');
23
+ require('viem/chains');
24
+ var useConnectAndSign = require('../authenticationHooks/useConnectAndSign/useConnectAndSign.cjs');
25
+ require('../../../context/DynamicContext/DynamicContext.cjs');
26
+ require('../../../events/dynamicEvents.cjs');
27
+ require('react-dom');
28
+ require('../../../config/ApiEndpoint.cjs');
29
+ require('../../../context/ThemeContext/ThemeContext.cjs');
30
+ require('@dynamic-labs/types');
31
+ require('../../../context/ErrorContext/ErrorContext.cjs');
32
+ require('../../../context/AccountExistsContext/AccountExistsContext.cjs');
33
+ require('yup');
34
+ require('react-i18next');
35
+ require('../../../context/MockContext/MockContext.cjs');
36
+ require('../useUserUpdateRequest/useUpdateUser/useUpdateUser.cjs');
37
+ require('../../../context/UserFieldEditorContext/UserFieldEditorContext.cjs');
38
+ require('../../../context/AccessDeniedContext/AccessDeniedContext.cjs');
39
+ require('@dynamic-labs/rpc-providers');
40
+ require('../../../context/UserWalletsContext/UserWalletsContext.cjs');
41
+ require('../../../components/Alert/Alert.cjs');
42
+ require('../../../components/ShadowDOM/ShadowDOM.cjs');
43
+ require('../../../components/IconButton/IconButton.cjs');
44
+ require('../../../components/InlineWidget/InlineWidget.cjs');
45
+ require('../../../components/IsBrowser/IsBrowser.cjs');
46
+ require('../../../components/MenuList/Dropdown/Dropdown.cjs');
47
+ require('../../../components/Transition/ZoomTransition/ZoomTransition.cjs');
48
+ require('../../../components/Transition/SlideInUpTransition/SlideInUpTransition.cjs');
49
+ require('../../../components/Transition/OpacityTransition/OpacityTransition.cjs');
50
+ require('../../../components/Popper/Popper/Popper.cjs');
51
+ require('../../../components/Popper/PopperContext/PopperContext.cjs');
52
+ require('react-focus-lock');
53
+ require('qrcode');
54
+ require('formik');
55
+ require('i18next');
56
+ require('../../../components/OverlayCard/OverlayCard.context.cjs');
57
+ require('../../../components/PasskeyCreatedSuccessBanner/PasskeyCreatedSuccessBanner.cjs');
58
+ require('../../../context/PasskeyContext/PasskeyContext.cjs');
59
+ require('../../../views/WalletList/WalletList.cjs');
60
+ require('../../../context/EmailVerificationContext/EmailVerificationContext.cjs');
61
+ require('@hcaptcha/react-hcaptcha');
62
+ require('../../../context/CaptchaContext/CaptchaContext.cjs');
63
+ require('../../../context/LoadingContext/LoadingContext.cjs');
64
+ require('../../../context/SocialRedirectContext/SocialRedirectContext.cjs');
65
+ require('../../../context/WalletGroupContext/WalletGroupContext.cjs');
66
+ require('../../../widgets/DynamicBridgeWidget/views/WalletsView/components/SecondaryWallets/SecondaryWallets.cjs');
67
+ require('../../../context/FooterAnimationContext/index.cjs');
68
+ require('../../../widgets/DynamicWidget/components/DynamicWidgetHeader/DynamicWidgetHeader.cjs');
69
+ require('../../../widgets/DynamicWidget/context/DynamicWidgetContext.cjs');
70
+ require('../../../components/UserProfile/parts/UserProfileField/components/VerifiedEmailIcon/VerifiedEmailIcon.cjs');
71
+ require('@dynamic-labs/viem-utils');
72
+ require('../../../views/TransactionConfirmationView/helpers/transactionErrorMessage.cjs');
73
+ require('../useTransactionWithGasPrice/useTransactionWithGasPrice.cjs');
74
+ require('../../../widgets/DynamicWidget/views/ManagePasskeysWidgetView/PasskeyCard/PasskeyCard.cjs');
75
+ var useInternalDynamicContext = require('../../../context/DynamicContext/useDynamicContext/useInternalDynamicContext.cjs');
76
+
77
+ const useNetworkNotSupported = () => {
78
+ const { selectedWalletConnector: walletConnector, setShowAuthFlow, bridgeChainsToConnect, bridgeOnboardingCompleted, } = useInternalDynamicContext.useInternalDynamicContext();
79
+ const { network: walletConnectorNetwork } = useWalletConnectorNetwork.useWalletConnectorNetwork(walletConnector);
80
+ const finishConnectAndSign = useConnectAndSign.useConnectAndSign({
81
+ shouldCallCallback: false,
82
+ shouldUpdateWallets: Boolean(bridgeChainsToConnect === null || bridgeChainsToConnect === void 0 ? void 0 : bridgeChainsToConnect.length),
83
+ });
84
+ // Finishes auth flow when wallet switches to proper network
85
+ React.useEffect(() => {
86
+ if (!isSupportedNetwork.isSupportedNetwork({ network: walletConnectorNetwork, walletConnector })) {
87
+ return;
88
+ }
89
+ finishConnectAndSign({
90
+ walletConnector: walletConnector,
91
+ });
92
+ // there are two scenarios here, one in not connected state and the other one in connected state.
93
+ // previously we were calling setShowAuthFlow(false) in useHandleWalletsToConnect.
94
+ // now, we don't call it in network-not-supported view, so we need to handle that scenario and close modal here
95
+ // this should be gone, once we're done with the useConnectAndSign hook refactor.
96
+ // TODO: https://linear.app/dynamic-labs/issue/QNTM-117/break-useconnectandsign-hook-to-small-parts
97
+ if (bridgeOnboardingCompleted) {
98
+ setShowAuthFlow(false);
99
+ }
100
+ }, [walletConnectorNetwork, setShowAuthFlow, bridgeOnboardingCompleted]);
101
+ return { currentNetwork: walletConnectorNetwork };
102
+ };
103
+
104
+ exports.useNetworkNotSupported = useNetworkNotSupported;
@@ -0,0 +1,3 @@
1
+ export declare const useNetworkNotSupported: () => {
2
+ currentNetwork: string | number | undefined;
3
+ };