@dynamic-labs/sdk-react-core 0.18.100-viem.1 → 0.18.100-viem.10

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 (106) hide show
  1. package/CHANGELOG.md +86 -0
  2. package/package.cjs +3 -3
  3. package/package.js +3 -3
  4. package/package.json +10 -10
  5. package/src/index.cjs +2 -0
  6. package/src/index.js +1 -0
  7. package/src/lib/components/MenuList/Dropdown/Dropdown.cjs +1 -1
  8. package/src/lib/components/MenuList/Dropdown/Dropdown.js +1 -1
  9. package/src/lib/components/ModalHeaderBanner/ModalHeaderBanner.cjs +6 -2
  10. package/src/lib/components/ModalHeaderBanner/ModalHeaderBanner.d.ts +2 -1
  11. package/src/lib/components/ModalHeaderBanner/ModalHeaderBanner.js +6 -2
  12. package/src/lib/components/OTPVerificationView/OTPVerificationView.cjs +2 -2
  13. package/src/lib/components/OTPVerificationView/OTPVerificationView.d.ts +1 -0
  14. package/src/lib/components/OTPVerificationView/OTPVerificationView.js +2 -2
  15. package/src/lib/components/Typography/Typography.cjs +1 -0
  16. package/src/lib/components/Typography/Typography.js +1 -0
  17. package/src/lib/components/Typography/Typography.types.d.ts +1 -1
  18. package/src/lib/components/UserProfile/UserProfile.cjs +1 -1
  19. package/src/lib/components/UserProfile/UserProfile.js +1 -1
  20. package/src/lib/components/UserProfile/parts/UserProfileSocialAccount/UserProfileSocialAccount.cjs +1 -1
  21. package/src/lib/components/UserProfile/parts/UserProfileSocialAccount/UserProfileSocialAccount.js +1 -1
  22. package/src/lib/context/DynamicContext/DynamicContext.cjs +8 -2
  23. package/src/lib/context/DynamicContext/DynamicContext.js +9 -3
  24. package/src/lib/context/DynamicContext/internalEvents/index.d.ts +2 -0
  25. package/src/lib/context/DynamicContext/internalEvents/internalEvents.cjs +14 -0
  26. package/src/lib/context/DynamicContext/internalEvents/internalEvents.d.ts +8 -0
  27. package/src/lib/context/DynamicContext/internalEvents/internalEvents.js +6 -0
  28. package/src/lib/context/DynamicContext/types/index.d.ts +4 -1
  29. package/src/lib/context/DynamicContext/useDynamicContext.cjs +2 -1
  30. package/src/lib/context/DynamicContext/useDynamicContext.d.ts +1 -1
  31. package/src/lib/context/DynamicContext/useDynamicContext.js +2 -1
  32. package/src/lib/context/SocialRedirectContext/SocialRedirectContext.cjs +2 -1
  33. package/src/lib/context/SocialRedirectContext/SocialRedirectContext.js +2 -1
  34. package/src/lib/data/api.cjs +17 -1
  35. package/src/lib/data/api.d.ts +2 -1
  36. package/src/lib/data/api.js +17 -2
  37. package/src/lib/main.global.cjs +1 -1
  38. package/src/lib/main.global.js +1 -1
  39. package/src/lib/modals/TransactionConfirmationModal/TransactionConfirmationModal.cjs +2 -1
  40. package/src/lib/modals/TransactionConfirmationModal/TransactionConfirmationModal.js +2 -1
  41. package/src/lib/shared/utils/hooks/usePreventPageScroll/usePreventPageScroll.cjs +28 -2
  42. package/src/lib/shared/utils/hooks/usePreventPageScroll/usePreventPageScroll.js +28 -2
  43. package/src/lib/styles/index.shadow.cjs +1 -1
  44. package/src/lib/styles/index.shadow.js +1 -1
  45. package/src/lib/utils/functions/createUserProfile/createUserProfile.cjs +1 -1
  46. package/src/lib/utils/functions/createUserProfile/createUserProfile.js +1 -1
  47. package/src/lib/utils/functions/digestSHA256/digestSHA256.cjs +11 -0
  48. package/src/lib/utils/functions/digestSHA256/digestSHA256.d.ts +1 -0
  49. package/src/lib/utils/functions/digestSHA256/digestSHA256.js +7 -0
  50. package/src/lib/utils/functions/digestSHA256/index.d.ts +1 -0
  51. package/src/lib/utils/functions/encodeBase64URL/encodeBase64URL.cjs +14 -0
  52. package/src/lib/utils/functions/encodeBase64URL/encodeBase64URL.d.ts +1 -0
  53. package/src/lib/utils/functions/encodeBase64URL/encodeBase64URL.js +10 -0
  54. package/src/lib/utils/functions/encodeBase64URL/index.d.ts +1 -0
  55. package/src/lib/utils/functions/getRedirectURIOrigin/getRedirectURIOrigin.cjs +33 -0
  56. package/src/lib/utils/functions/getRedirectURIOrigin/getRedirectURIOrigin.d.ts +1 -0
  57. package/src/lib/utils/functions/getRedirectURIOrigin/getRedirectURIOrigin.js +29 -0
  58. package/src/lib/utils/functions/getRedirectURIOrigin/index.d.ts +1 -0
  59. package/src/lib/utils/functions/index.d.ts +6 -0
  60. package/src/lib/utils/functions/randomString/index.d.ts +1 -0
  61. package/src/lib/utils/functions/randomString/randomString.cjs +14 -0
  62. package/src/lib/utils/functions/randomString/randomString.d.ts +1 -0
  63. package/src/lib/utils/functions/randomString/randomString.js +10 -0
  64. package/src/lib/utils/functions/sendTransactionWithAutoNonce/index.d.ts +1 -0
  65. package/src/lib/utils/functions/sendTransactionWithAutoNonce/sendTransactionWithAutoNonce.cjs +48 -0
  66. package/src/lib/utils/functions/sendTransactionWithAutoNonce/sendTransactionWithAutoNonce.d.ts +18 -0
  67. package/src/lib/utils/functions/sendTransactionWithAutoNonce/sendTransactionWithAutoNonce.js +43 -0
  68. package/src/lib/utils/functions/stringifyURIQuery/index.d.ts +1 -0
  69. package/src/lib/utils/functions/stringifyURIQuery/stringifyURIQuery.cjs +13 -0
  70. package/src/lib/utils/functions/stringifyURIQuery/stringifyURIQuery.d.ts +1 -0
  71. package/src/lib/utils/functions/stringifyURIQuery/stringifyURIQuery.js +9 -0
  72. package/src/lib/utils/hooks/authenticationHooks/useConnectAndSign/useConnectAndSign.cjs +8 -2
  73. package/src/lib/utils/hooks/authenticationHooks/useConnectAndSign/useConnectAndSign.js +9 -3
  74. package/src/lib/utils/hooks/multiWallet/useSyncPrimaryWallet/useSyncPrimaryWallet.cjs +4 -0
  75. package/src/lib/utils/hooks/multiWallet/useSyncPrimaryWallet/useSyncPrimaryWallet.js +4 -0
  76. package/src/lib/utils/hooks/useConnectWallet/useConnectWallet.cjs +14 -16
  77. package/src/lib/utils/hooks/useConnectWallet/useConnectWallet.js +15 -17
  78. package/src/lib/utils/hooks/useConnectedWalletsNetworkValidation/useConnectedWalletsNetworkValidation.cjs +7 -6
  79. package/src/lib/utils/hooks/useConnectedWalletsNetworkValidation/useConnectedWalletsNetworkValidation.js +7 -6
  80. package/src/lib/utils/hooks/usePrimaryWalletId/usePrimaryWalletId.cjs +6 -2
  81. package/src/lib/utils/hooks/usePrimaryWalletId/usePrimaryWalletId.d.ts +2 -1
  82. package/src/lib/utils/hooks/usePrimaryWalletId/usePrimaryWalletId.js +6 -2
  83. package/src/lib/utils/hooks/useSocialAccounts/useSocialAccounts.cjs +128 -23
  84. package/src/lib/utils/hooks/useSocialAccounts/useSocialAccounts.d.ts +5 -1
  85. package/src/lib/utils/hooks/useSocialAccounts/useSocialAccounts.js +130 -25
  86. package/src/lib/views/CaptchaVerifyUser/CaptchaVerifyUser.cjs +9 -3
  87. package/src/lib/views/CaptchaVerifyUser/CaptchaVerifyUser.js +9 -3
  88. package/src/lib/views/EmailWalletOTPVerificationView/EmailWalletOTPVerificationView.cjs +1 -1
  89. package/src/lib/views/EmailWalletOTPVerificationView/EmailWalletOTPVerificationView.js +1 -1
  90. package/src/lib/views/NetworkNotSupported/NetworkNotSupported.cjs +3 -2
  91. package/src/lib/views/NetworkNotSupported/NetworkNotSupported.js +3 -2
  92. package/src/lib/views/NetworkNotSupportedSwitchManual/NetworkNotSupportedSwitchManual.cjs +3 -2
  93. package/src/lib/views/NetworkNotSupportedSwitchManual/NetworkNotSupportedSwitchManual.js +3 -2
  94. package/src/lib/views/SendBalanceView/components/TransactionStage/TransactionStage.cjs +4 -10
  95. package/src/lib/views/SendBalanceView/components/TransactionStage/TransactionStage.js +4 -10
  96. package/src/lib/views/WalletGroupView/components/WalletGroupItem/WalletGroupItem.cjs +1 -0
  97. package/src/lib/views/WalletGroupView/components/WalletGroupItem/WalletGroupItem.js +1 -0
  98. package/src/lib/views/WalletList/WalletListItem/WalletListItem.cjs +1 -1
  99. package/src/lib/views/WalletList/WalletListItem/WalletListItem.js +1 -1
  100. package/src/lib/widgets/DynamicWidget/hooks/useFetchCurrency/useFetchCurrency.cjs +4 -1
  101. package/src/lib/widgets/DynamicWidget/hooks/useFetchCurrency/useFetchCurrency.js +4 -1
  102. package/src/lib/widgets/OAuthIFrameContainer/OAuthIFrameContainer.cjs +13 -0
  103. package/src/lib/widgets/OAuthIFrameContainer/OAuthIFrameContainer.d.ts +2 -0
  104. package/src/lib/widgets/OAuthIFrameContainer/OAuthIFrameContainer.js +9 -0
  105. package/src/lib/widgets/OAuthIFrameContainer/index.d.ts +1 -0
  106. package/src/lib/widgets/index.d.ts +1 -0
@@ -0,0 +1,48 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var _tslib = require('../../../../../_virtual/_tslib.cjs');
6
+
7
+ const MAGIC_COULD_NOT_REPLACE_TRANSACTION_ERROR_CODE = -32603;
8
+ /**
9
+ * Sends a transaction with an automatically determined nonce, if not provided.
10
+ *
11
+ * In Ethereum, each transaction sent from a particular address must have a unique nonce.
12
+ * If the transaction does not already have a nonce, this function helps to automatically set it.
13
+ * If a transaction with a particular nonce fails due to a "could not replace transaction" error,
14
+ * this function will automatically retry with the next nonce.
15
+ *
16
+ * @param connector - A Dynamic connector to interact with the Ethereum network.
17
+ * @param transaction - The transaction details.
18
+ * @param sendTransactionHandler - A handler function to send the transaction.
19
+ *
20
+ * @returns A promise that resolves to the transaction response.
21
+ */
22
+ const sendTransactionWithAutoNonce = (connector, transaction, sendTransactionHandler) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
23
+ if (transaction.nonce !== undefined) {
24
+ return sendTransactionHandler(transaction);
25
+ }
26
+ const publicClient = yield connector.getRpcProvider();
27
+ const walletClient = yield connector.getSigner();
28
+ const [address] = yield walletClient.getAddresses();
29
+ const nonce = yield publicClient.getTransactionCount({
30
+ address,
31
+ });
32
+ const transactionWithNonce = Object.assign(Object.assign({}, transaction), { nonce });
33
+ try {
34
+ const response = yield sendTransactionHandler(transactionWithNonce);
35
+ return response;
36
+ }
37
+ catch (err) {
38
+ if (err.code ===
39
+ MAGIC_COULD_NOT_REPLACE_TRANSACTION_ERROR_CODE) {
40
+ const transactionWithNextNonce = Object.assign(Object.assign({}, transaction), { nonce: nonce + 1 });
41
+ return sendTransactionHandler(transactionWithNextNonce);
42
+ }
43
+ throw err;
44
+ }
45
+ });
46
+
47
+ exports.MAGIC_COULD_NOT_REPLACE_TRANSACTION_ERROR_CODE = MAGIC_COULD_NOT_REPLACE_TRANSACTION_ERROR_CODE;
48
+ exports.sendTransactionWithAutoNonce = sendTransactionWithAutoNonce;
@@ -0,0 +1,18 @@
1
+ import { TransactionRequest, Address } from 'viem';
2
+ import { WalletConnector } from '../../../..';
3
+ export declare const MAGIC_COULD_NOT_REPLACE_TRANSACTION_ERROR_CODE = -32603;
4
+ /**
5
+ * Sends a transaction with an automatically determined nonce, if not provided.
6
+ *
7
+ * In Ethereum, each transaction sent from a particular address must have a unique nonce.
8
+ * If the transaction does not already have a nonce, this function helps to automatically set it.
9
+ * If a transaction with a particular nonce fails due to a "could not replace transaction" error,
10
+ * this function will automatically retry with the next nonce.
11
+ *
12
+ * @param connector - A Dynamic connector to interact with the Ethereum network.
13
+ * @param transaction - The transaction details.
14
+ * @param sendTransactionHandler - A handler function to send the transaction.
15
+ *
16
+ * @returns A promise that resolves to the transaction response.
17
+ */
18
+ export declare const sendTransactionWithAutoNonce: (connector: WalletConnector, transaction: TransactionRequest, sendTransactionHandler: (transaction: TransactionRequest) => Promise<Address>) => Promise<`0x${string}`>;
@@ -0,0 +1,43 @@
1
+ import { __awaiter } from '../../../../../_virtual/_tslib.js';
2
+
3
+ const MAGIC_COULD_NOT_REPLACE_TRANSACTION_ERROR_CODE = -32603;
4
+ /**
5
+ * Sends a transaction with an automatically determined nonce, if not provided.
6
+ *
7
+ * In Ethereum, each transaction sent from a particular address must have a unique nonce.
8
+ * If the transaction does not already have a nonce, this function helps to automatically set it.
9
+ * If a transaction with a particular nonce fails due to a "could not replace transaction" error,
10
+ * this function will automatically retry with the next nonce.
11
+ *
12
+ * @param connector - A Dynamic connector to interact with the Ethereum network.
13
+ * @param transaction - The transaction details.
14
+ * @param sendTransactionHandler - A handler function to send the transaction.
15
+ *
16
+ * @returns A promise that resolves to the transaction response.
17
+ */
18
+ const sendTransactionWithAutoNonce = (connector, transaction, sendTransactionHandler) => __awaiter(void 0, void 0, void 0, function* () {
19
+ if (transaction.nonce !== undefined) {
20
+ return sendTransactionHandler(transaction);
21
+ }
22
+ const publicClient = yield connector.getRpcProvider();
23
+ const walletClient = yield connector.getSigner();
24
+ const [address] = yield walletClient.getAddresses();
25
+ const nonce = yield publicClient.getTransactionCount({
26
+ address,
27
+ });
28
+ const transactionWithNonce = Object.assign(Object.assign({}, transaction), { nonce });
29
+ try {
30
+ const response = yield sendTransactionHandler(transactionWithNonce);
31
+ return response;
32
+ }
33
+ catch (err) {
34
+ if (err.code ===
35
+ MAGIC_COULD_NOT_REPLACE_TRANSACTION_ERROR_CODE) {
36
+ const transactionWithNextNonce = Object.assign(Object.assign({}, transaction), { nonce: nonce + 1 });
37
+ return sendTransactionHandler(transactionWithNextNonce);
38
+ }
39
+ throw err;
40
+ }
41
+ });
42
+
43
+ export { MAGIC_COULD_NOT_REPLACE_TRANSACTION_ERROR_CODE, sendTransactionWithAutoNonce };
@@ -0,0 +1 @@
1
+ export { stringifyURIQuery } from './stringifyURIQuery';
@@ -0,0 +1,13 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ const stringifyURIQuery = (obj) => {
6
+ const str = [];
7
+ for (const prop in obj) {
8
+ str.push(encodeURIComponent(prop) + '=' + encodeURIComponent(obj[prop]));
9
+ }
10
+ return str.join('&');
11
+ };
12
+
13
+ exports.stringifyURIQuery = stringifyURIQuery;
@@ -0,0 +1 @@
1
+ export declare const stringifyURIQuery: (obj: any) => string;
@@ -0,0 +1,9 @@
1
+ const stringifyURIQuery = (obj) => {
2
+ const str = [];
3
+ for (const prop in obj) {
4
+ str.push(encodeURIComponent(prop) + '=' + encodeURIComponent(obj[prop]));
5
+ }
6
+ return str.join('&');
7
+ };
8
+
9
+ export { stringifyURIQuery };
@@ -32,7 +32,7 @@ const useConnectAndSign = ({ shouldUpdateWallets = true, shouldCallCallback = tr
32
32
  const { setView, goToInitialView } = ViewContext.useViewContext();
33
33
  const { setErrorMessage } = ErrorContext.useErrorContext();
34
34
  const { captchaToken } = CaptchaContext.useCaptchaContext();
35
- const { authMode, connectWallet, consumeNonce, displaySiweStatement, environmentId, projectSettings, setIsSingleWalletAccount, user, walletUiUtils, setCallback, setIsVerificationInProgress, isFullyConnected, walletsToConnectByChain, } = useInternalDynamicContext.useInternalDynamicContext();
35
+ const { authMode, connectWallet, consumeNonce, displaySiweStatement, environmentId, projectSettings, setIsSingleWalletAccount, user, walletUiUtils, setCallback, setIsVerificationInProgress, isFullyConnected, walletsToConnectByChain, connectedWallets, } = useInternalDynamicContext.useInternalDynamicContext();
36
36
  const { handleWalletsToConnect } = useHandleWalletsToConnect.useHandleWalletsToConnect();
37
37
  const verifyWallet = useVerifyWallet.useVerifyWallet({
38
38
  consumeNonce,
@@ -72,9 +72,15 @@ const useConnectAndSign = ({ shouldUpdateWallets = true, shouldCallCallback = tr
72
72
  }
73
73
  if (isConnectOnly.isConnectOnly(user, authMode)) {
74
74
  localStorage.LocalStorage.setToLS(localStorage$1.LAST_USED_WALLET, walletConnector.name);
75
- if (shouldUpdateWallets) {
75
+ // we don't want to re-calculate wallets to connect state if wallet is already connected.
76
+ // it may happen when user switch network in connect flow on already connected wallet
77
+ const isAlreadyConnected = connectedWallets.find((wallet) => walletConnectorCore.isSameAddress(publicWalletAddress, wallet.address, wallet.chain));
78
+ if (shouldUpdateWallets && !isAlreadyConnected) {
76
79
  handleWalletsToConnect();
77
80
  }
81
+ if (isAlreadyConnected) {
82
+ setView('bridge-next-wallet-connection');
83
+ }
78
84
  if (!isFullyConnected || (walletsToConnectByChain === null || walletsToConnectByChain === void 0 ? void 0 : walletsToConnectByChain.length)) {
79
85
  setCallback('connectSuccess');
80
86
  }
@@ -1,5 +1,5 @@
1
1
  import { __awaiter } from '../../../../../../_virtual/_tslib.js';
2
- import { isEmailWalletConnector, isEmailOTPWalletConnector, isBloctoConnector } from '@dynamic-labs/wallet-connector-core';
2
+ import { isEmailWalletConnector, isEmailOTPWalletConnector, isBloctoConnector, isSameAddress } from '@dynamic-labs/wallet-connector-core';
3
3
  import { showPendingConnectView } from '../helpers/showPendingConnectView.js';
4
4
  import { isConnectOnly } from '../helpers/isConnectOnly.js';
5
5
  import { useInternalDynamicContext } from '../../../../context/DynamicContext/useInternalDynamicContext.js';
@@ -28,7 +28,7 @@ const useConnectAndSign = ({ shouldUpdateWallets = true, shouldCallCallback = tr
28
28
  const { setView, goToInitialView } = useViewContext();
29
29
  const { setErrorMessage } = useErrorContext();
30
30
  const { captchaToken } = useCaptchaContext();
31
- const { authMode, connectWallet, consumeNonce, displaySiweStatement, environmentId, projectSettings, setIsSingleWalletAccount, user, walletUiUtils, setCallback, setIsVerificationInProgress, isFullyConnected, walletsToConnectByChain, } = useInternalDynamicContext();
31
+ const { authMode, connectWallet, consumeNonce, displaySiweStatement, environmentId, projectSettings, setIsSingleWalletAccount, user, walletUiUtils, setCallback, setIsVerificationInProgress, isFullyConnected, walletsToConnectByChain, connectedWallets, } = useInternalDynamicContext();
32
32
  const { handleWalletsToConnect } = useHandleWalletsToConnect();
33
33
  const verifyWallet = useVerifyWallet({
34
34
  consumeNonce,
@@ -68,9 +68,15 @@ const useConnectAndSign = ({ shouldUpdateWallets = true, shouldCallCallback = tr
68
68
  }
69
69
  if (isConnectOnly(user, authMode)) {
70
70
  LocalStorage.setToLS(LAST_USED_WALLET, walletConnector.name);
71
- if (shouldUpdateWallets) {
71
+ // we don't want to re-calculate wallets to connect state if wallet is already connected.
72
+ // it may happen when user switch network in connect flow on already connected wallet
73
+ const isAlreadyConnected = connectedWallets.find((wallet) => isSameAddress(publicWalletAddress, wallet.address, wallet.chain));
74
+ if (shouldUpdateWallets && !isAlreadyConnected) {
72
75
  handleWalletsToConnect();
73
76
  }
77
+ if (isAlreadyConnected) {
78
+ setView('bridge-next-wallet-connection');
79
+ }
74
80
  if (!isFullyConnected || (walletsToConnectByChain === null || walletsToConnectByChain === void 0 ? void 0 : walletsToConnectByChain.length)) {
75
81
  setCallback('connectSuccess');
76
82
  }
@@ -93,6 +93,10 @@ const useSyncPrimaryWallet = ({ connectWallet, computeConnectedStateForWallets,
93
93
  }
94
94
  // user is logged in (has valid jwt), but no wallet is connected
95
95
  if (isAuthenticated && e.code === errors.MISSING_ADDRESS_ERROR) {
96
+ if (!primaryWallet.connector.isInstalledOnBrowser()) {
97
+ handleLogOut();
98
+ return;
99
+ }
96
100
  setShowAuthFlow(true);
97
101
  setView('wallet-locked-view');
98
102
  }
@@ -89,6 +89,10 @@ const useSyncPrimaryWallet = ({ connectWallet, computeConnectedStateForWallets,
89
89
  }
90
90
  // user is logged in (has valid jwt), but no wallet is connected
91
91
  if (isAuthenticated && e.code === MISSING_ADDRESS_ERROR) {
92
+ if (!primaryWallet.connector.isInstalledOnBrowser()) {
93
+ handleLogOut();
94
+ return;
95
+ }
92
96
  setShowAuthFlow(true);
93
97
  setView('wallet-locked-view');
94
98
  }
@@ -130,8 +130,7 @@ const useConnectWallet = ({ authMode, clearPrimaryWalletId, enableVisitTrackingO
130
130
  network: currentWalletConnectoNetwork,
131
131
  });
132
132
  });
133
- const shouldSkipCreatingVisit = React.useMemo(() => (authMode === 'connect-only' && !enableVisitTrackingOnConnectOnly) ||
134
- connectedWallet, [authMode, connectedWallet, enableVisitTrackingOnConnectOnly]);
133
+ const shouldSkipCreatingVisit = authMode === 'connect-only' && !enableVisitTrackingOnConnectOnly;
135
134
  const connectWallet = (walletConnector, fetchPublicAddressOpts, shouldCallCallback = true) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
136
135
  const publicWalletAddress = yield walletConnector.fetchPublicAddress(fetchPublicAddressOpts);
137
136
  if (!publicWalletAddress) {
@@ -168,21 +167,20 @@ const useConnectWallet = ({ authMode, clearPrimaryWalletId, enableVisitTrackingO
168
167
  walletConnectorKey: walletConnector.name,
169
168
  walletId,
170
169
  });
170
+ if (!shouldSkipCreatingVisit) {
171
+ // send information to backend to kick off background jobs
172
+ // so verify/sign on the next step could go by more quickly
173
+ // this is async work, but DO NOT AWAIT
174
+ api.createVisit({
175
+ authMode,
176
+ chain: walletChain || '',
177
+ environmentId,
178
+ publicWalletAddress,
179
+ walletName: walletConnector.name,
180
+ walletProvider: getWalletProvider.getWalletProvider(walletConnector),
181
+ });
182
+ }
171
183
  }
172
- if (shouldSkipCreatingVisit) {
173
- return Promise.resolve(publicWalletAddress);
174
- }
175
- // send information to backend to kick off background jobs
176
- // so verify/sign on the next step could go by more quickly
177
- // this is async work, but DO NOT AWAIT
178
- api.createVisit({
179
- authMode,
180
- chain: walletChain || '',
181
- environmentId,
182
- publicWalletAddress,
183
- walletName: walletConnector.name,
184
- walletProvider: getWalletProvider.getWalletProvider(walletConnector),
185
- });
186
184
  return Promise.resolve(publicWalletAddress);
187
185
  });
188
186
  const unlinkConnectedWallet = (walletId) => {
@@ -1,5 +1,5 @@
1
1
  import { __awaiter } from '../../../../../_virtual/_tslib.js';
2
- import { useState, useCallback, useEffect, useMemo } from 'react';
2
+ import { useState, useCallback, useEffect } from 'react';
3
3
  import { getWalletConnectorByName, logger } from '@dynamic-labs/wallet-connector-core';
4
4
  import '@dynamic-labs/sdk-api';
5
5
  import '../../../shared/logger.js';
@@ -126,8 +126,7 @@ const useConnectWallet = ({ authMode, clearPrimaryWalletId, enableVisitTrackingO
126
126
  network: currentWalletConnectoNetwork,
127
127
  });
128
128
  });
129
- const shouldSkipCreatingVisit = useMemo(() => (authMode === 'connect-only' && !enableVisitTrackingOnConnectOnly) ||
130
- connectedWallet, [authMode, connectedWallet, enableVisitTrackingOnConnectOnly]);
129
+ const shouldSkipCreatingVisit = authMode === 'connect-only' && !enableVisitTrackingOnConnectOnly;
131
130
  const connectWallet = (walletConnector, fetchPublicAddressOpts, shouldCallCallback = true) => __awaiter(void 0, void 0, void 0, function* () {
132
131
  const publicWalletAddress = yield walletConnector.fetchPublicAddress(fetchPublicAddressOpts);
133
132
  if (!publicWalletAddress) {
@@ -164,21 +163,20 @@ const useConnectWallet = ({ authMode, clearPrimaryWalletId, enableVisitTrackingO
164
163
  walletConnectorKey: walletConnector.name,
165
164
  walletId,
166
165
  });
166
+ if (!shouldSkipCreatingVisit) {
167
+ // send information to backend to kick off background jobs
168
+ // so verify/sign on the next step could go by more quickly
169
+ // this is async work, but DO NOT AWAIT
170
+ createVisit({
171
+ authMode,
172
+ chain: walletChain || '',
173
+ environmentId,
174
+ publicWalletAddress,
175
+ walletName: walletConnector.name,
176
+ walletProvider: getWalletProvider(walletConnector),
177
+ });
178
+ }
167
179
  }
168
- if (shouldSkipCreatingVisit) {
169
- return Promise.resolve(publicWalletAddress);
170
- }
171
- // send information to backend to kick off background jobs
172
- // so verify/sign on the next step could go by more quickly
173
- // this is async work, but DO NOT AWAIT
174
- createVisit({
175
- authMode,
176
- chain: walletChain || '',
177
- environmentId,
178
- publicWalletAddress,
179
- walletName: walletConnector.name,
180
- walletProvider: getWalletProvider(walletConnector),
181
- });
182
180
  return Promise.resolve(publicWalletAddress);
183
181
  });
184
182
  const unlinkConnectedWallet = (walletId) => {
@@ -22,7 +22,7 @@ var isProgrammableNetworkSwitchSupported = require('../../functions/isProgrammab
22
22
 
23
23
  const useConnectedWalletsNetworkValidation = () => {
24
24
  const { connectedWallets, selectedWalletConnector, setSelectedWalletConnector, setShowAuthFlow, showAuthFlow, walletsToConnectByChain, isBridgeFlow, } = useInternalDynamicContext.useInternalDynamicContext();
25
- const { view, setView } = ViewContext.useViewContext();
25
+ const { setView } = ViewContext.useViewContext();
26
26
  React.useEffect(() => {
27
27
  if (!isBridgeFlow) {
28
28
  return;
@@ -53,16 +53,17 @@ const useConnectedWalletsNetworkValidation = () => {
53
53
  }
54
54
  setView(networkNotSupportedView);
55
55
  }
56
+ // we need it to remove 'showAuthFlow' property. we don't want to react to it,
57
+ // because closing modal on network switch causes it to re-open
58
+ // eslint-disable-next-line react-hooks/exhaustive-deps
56
59
  }, [
57
- isBridgeFlow,
58
60
  connectedWallets,
59
- view,
61
+ isBridgeFlow,
60
62
  selectedWalletConnector,
61
- walletsToConnectByChain,
62
- showAuthFlow,
63
- setView,
64
63
  setSelectedWalletConnector,
65
64
  setShowAuthFlow,
65
+ setView,
66
+ walletsToConnectByChain,
66
67
  ]);
67
68
  };
68
69
 
@@ -18,7 +18,7 @@ import { isProgrammableNetworkSwitchSupported } from '../../functions/isProgramm
18
18
 
19
19
  const useConnectedWalletsNetworkValidation = () => {
20
20
  const { connectedWallets, selectedWalletConnector, setSelectedWalletConnector, setShowAuthFlow, showAuthFlow, walletsToConnectByChain, isBridgeFlow, } = useInternalDynamicContext();
21
- const { view, setView } = useViewContext();
21
+ const { setView } = useViewContext();
22
22
  useEffect(() => {
23
23
  if (!isBridgeFlow) {
24
24
  return;
@@ -49,16 +49,17 @@ const useConnectedWalletsNetworkValidation = () => {
49
49
  }
50
50
  setView(networkNotSupportedView);
51
51
  }
52
+ // we need it to remove 'showAuthFlow' property. we don't want to react to it,
53
+ // because closing modal on network switch causes it to re-open
54
+ // eslint-disable-next-line react-hooks/exhaustive-deps
52
55
  }, [
53
- isBridgeFlow,
54
56
  connectedWallets,
55
- view,
57
+ isBridgeFlow,
56
58
  selectedWalletConnector,
57
- walletsToConnectByChain,
58
- showAuthFlow,
59
- setView,
60
59
  setSelectedWalletConnector,
61
60
  setShowAuthFlow,
61
+ setView,
62
+ walletsToConnectByChain,
62
63
  ]);
63
64
  };
64
65
 
@@ -20,11 +20,15 @@ require('../../../shared/consts/index.cjs');
20
20
  var primaryWalletIdValidator = require('../useWalletConnectors/utils/primaryWalletIdValidator/primaryWalletIdValidator.cjs');
21
21
  require('@dynamic-labs/multi-wallet');
22
22
 
23
- const usePrimaryWalletId = () => {
24
- const [primaryWalletId, setPrimaryWalletIdState, clearPrimaryWalletId] = useLocalStorage.useLocalStorage(localStorage.PRIMARY_WALLET_ID, undefined, primaryWalletIdValidator.primaryWalletIdValidator);
23
+ const usePrimaryWalletId = (internalEvents) => {
24
+ const [primaryWalletId, setPrimaryWalletIdState, clearPrimaryWalletIdStorage,] = useLocalStorage.useLocalStorage(localStorage.PRIMARY_WALLET_ID, undefined, primaryWalletIdValidator.primaryWalletIdValidator);
25
25
  const setPrimaryWalletId = React.useCallback((walletId) => {
26
26
  setPrimaryWalletIdState(walletId);
27
27
  }, [setPrimaryWalletIdState]);
28
+ const clearPrimaryWalletId = () => {
29
+ clearPrimaryWalletIdStorage();
30
+ internalEvents.emit('clearPrimaryWallet');
31
+ };
28
32
  return {
29
33
  clearPrimaryWalletId,
30
34
  primaryWalletId,
@@ -1,4 +1,5 @@
1
- export declare const usePrimaryWalletId: () => {
1
+ import { InternalEventEmitter } from '../../../context/DynamicContext/internalEvents';
2
+ export declare const usePrimaryWalletId: (internalEvents: InternalEventEmitter) => {
2
3
  clearPrimaryWalletId: () => void;
3
4
  primaryWalletId: string | undefined;
4
5
  setPrimaryWalletId: (walletId: string) => void;
@@ -16,11 +16,15 @@ import '../../../shared/consts/index.js';
16
16
  import { primaryWalletIdValidator } from '../useWalletConnectors/utils/primaryWalletIdValidator/primaryWalletIdValidator.js';
17
17
  import '@dynamic-labs/multi-wallet';
18
18
 
19
- const usePrimaryWalletId = () => {
20
- const [primaryWalletId, setPrimaryWalletIdState, clearPrimaryWalletId] = useLocalStorage(PRIMARY_WALLET_ID, undefined, primaryWalletIdValidator);
19
+ const usePrimaryWalletId = (internalEvents) => {
20
+ const [primaryWalletId, setPrimaryWalletIdState, clearPrimaryWalletIdStorage,] = useLocalStorage(PRIMARY_WALLET_ID, undefined, primaryWalletIdValidator);
21
21
  const setPrimaryWalletId = useCallback((walletId) => {
22
22
  setPrimaryWalletIdState(walletId);
23
23
  }, [setPrimaryWalletIdState]);
24
+ const clearPrimaryWalletId = () => {
25
+ clearPrimaryWalletIdStorage();
26
+ internalEvents.emit('clearPrimaryWallet');
27
+ };
24
28
  return {
25
29
  clearPrimaryWalletId,
26
30
  primaryWalletId,