@dynamic-labs/sdk-react-core 4.9.1-preview.0 → 4.9.2-preview.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +13 -2
- package/package.cjs +1 -1
- package/package.js +1 -1
- package/package.json +11 -11
- package/src/index.cjs +2 -0
- package/src/index.d.ts +4 -3
- package/src/index.js +1 -0
- package/src/lib/components/NetworkPicker/components/NetworkDropdown/NetworkDropdown.cjs +11 -2
- package/src/lib/components/NetworkPicker/components/NetworkDropdown/NetworkDropdown.js +11 -2
- package/src/lib/components/UserProfile/parts/UserProfileSocialAccount/UserProfileSocialAccount.cjs +10 -4
- package/src/lib/components/UserProfile/parts/UserProfileSocialAccount/UserProfileSocialAccount.js +10 -4
- package/src/lib/context/DynamicContext/DynamicContext.cjs +1 -3
- package/src/lib/context/DynamicContext/DynamicContext.js +2 -4
- package/src/lib/context/DynamicContext/hooks/useShowAuthFlow/useShowAuthFlow.cjs +1 -1
- package/src/lib/context/DynamicContext/hooks/useShowAuthFlow/useShowAuthFlow.js +1 -1
- package/src/lib/context/DynamicContext/types/IDynamicContext.d.ts +2 -3
- package/src/lib/context/DynamicContext/types/SettingsOverrides.d.ts +12 -5
- package/src/lib/context/OnrampContext/useEnabledOnrampProviders/useEnabledOnrampProviders.cjs +18 -1
- package/src/lib/context/OnrampContext/useEnabledOnrampProviders/useEnabledOnrampProviders.d.ts +2 -2
- package/src/lib/context/OnrampContext/useEnabledOnrampProviders/useEnabledOnrampProviders.js +19 -2
- package/src/lib/context/SocialRedirectContext/hooks/useRedirectSocialHandler/useRedirectSocialHandler.cjs +6 -6
- package/src/lib/context/SocialRedirectContext/hooks/useRedirectSocialHandler/useRedirectSocialHandler.js +6 -6
- package/src/lib/utils/functions/findWalletOptionFor/findWalletOptionFor.cjs +1 -1
- package/src/lib/utils/functions/findWalletOptionFor/findWalletOptionFor.js +1 -1
- package/src/lib/utils/functions/generateMessages/index.cjs +19 -9
- package/src/lib/utils/functions/generateMessages/index.js +19 -9
- package/src/lib/utils/functions/index.d.ts +0 -1
- package/src/lib/utils/functions/onrampConfigurationToOnrampOption/onrampConfigurationToOnrampOption.cjs +31 -18
- package/src/lib/utils/functions/onrampConfigurationToOnrampOption/onrampConfigurationToOnrampOption.d.ts +3 -0
- package/src/lib/utils/functions/onrampConfigurationToOnrampOption/onrampConfigurationToOnrampOption.js +31 -18
- package/src/lib/utils/functions/onrampProviders/coinbase.cjs +55 -0
- package/src/lib/utils/functions/onrampProviders/coinbase.d.ts +15 -0
- package/src/lib/utils/functions/onrampProviders/coinbase.js +50 -0
- package/src/lib/utils/functions/onrampProviders/index.cjs +24 -0
- package/src/lib/utils/functions/onrampProviders/index.d.ts +11 -0
- package/src/lib/utils/functions/onrampProviders/index.js +19 -0
- package/src/lib/utils/functions/openOnrampPopup.cjs +8 -5
- package/src/lib/utils/functions/openOnrampPopup.d.ts +4 -2
- package/src/lib/utils/functions/openOnrampPopup.js +8 -5
- package/src/lib/utils/functions/socialStorage/socialStorage.d.ts +2 -0
- package/src/lib/utils/hooks/useDynamicWaas/useDynamicWaas.cjs +2 -2
- package/src/lib/utils/hooks/useDynamicWaas/useDynamicWaas.js +2 -2
- package/src/lib/utils/hooks/useEmbeddedWallet/useEmbeddedWallet.cjs +2 -0
- package/src/lib/utils/hooks/useEmbeddedWallet/useEmbeddedWallet.d.ts +2 -1
- package/src/lib/utils/hooks/useEmbeddedWallet/useEmbeddedWallet.js +2 -0
- package/src/lib/utils/hooks/useGlobalLoading/useGlobalLoading.cjs +1 -7
- package/src/lib/utils/hooks/useGlobalLoading/useGlobalLoading.js +1 -7
- package/src/lib/utils/hooks/useSocialAccounts/useSocialAccounts.cjs +5 -1
- package/src/lib/utils/hooks/useSocialAccounts/useSocialAccounts.d.ts +5 -1
- package/src/lib/utils/hooks/useSocialAccounts/useSocialAccounts.js +5 -1
- package/src/lib/utils/hooks/useSocialAuth/useSocialAuth.cjs +2 -1
- package/src/lib/utils/hooks/useSocialAuth/useSocialAuth.d.ts +2 -1
- package/src/lib/utils/hooks/useSocialAuth/useSocialAuth.js +2 -1
- package/src/lib/utils/hooks/useUserAuth/useUserAuth.cjs +8 -2
- package/src/lib/utils/hooks/useUserAuth/useUserAuth.js +9 -3
- package/src/lib/utils/hooks/useWalletItemActions/useHandleWalletItem/useHandleWalletItem.cjs +4 -0
- package/src/lib/utils/hooks/useWalletItemActions/useHandleWalletItem/useHandleWalletItem.js +4 -0
- package/src/lib/widgets/DynamicEmbeddedWidget/DynamicEmbeddedAuthFlow/DynamicEmbeddedAuthFlow.cjs +5 -7
- package/src/lib/widgets/DynamicEmbeddedWidget/DynamicEmbeddedAuthFlow/DynamicEmbeddedAuthFlow.js +5 -7
- package/src/lib/widgets/OnrampWidget/OnrampWidget.cjs +11 -2
- package/src/lib/widgets/OnrampWidget/OnrampWidget.d.ts +4 -0
- package/src/lib/widgets/OnrampWidget/OnrampWidget.js +11 -2
- package/src/lib/utils/functions/coinbaseOnramp/formatCoinbaseOnrampUrl.cjs +0 -27
- package/src/lib/utils/functions/coinbaseOnramp/formatCoinbaseOnrampUrl.d.ts +0 -2
- package/src/lib/utils/functions/coinbaseOnramp/formatCoinbaseOnrampUrl.js +0 -23
- package/src/lib/utils/functions/coinbaseOnramp/index.d.ts +0 -1
|
@@ -5,7 +5,6 @@ import { logger } from '../../../shared/logger.js';
|
|
|
5
5
|
import { lastAuthenticatedAccount } from '../../../shared/utils/functions/lastAuthenticatedAccount/index.js';
|
|
6
6
|
import { shouldFetchNonce } from '../../../shared/utils/functions/shouldFetchNonce/shouldFetchNonce.js';
|
|
7
7
|
import { useLoadingAndLifecycle } from '../../../store/state/loadingAndLifecycle.js';
|
|
8
|
-
import { useConnectorsInitializing } from '../../../store/state/connectorsInitializing/connectorsInitializing.js';
|
|
9
8
|
|
|
10
9
|
const useGlobalLoading = ({ authMode, connectedInfo, connectedWallets, projectSettings, primaryWalletId, primaryWallet, user, isUserLoading, walletBook, enableInstrumentation, appName, environmentId, nonce, }) => {
|
|
11
10
|
var _a;
|
|
@@ -13,8 +12,6 @@ const useGlobalLoading = ({ authMode, connectedInfo, connectedWallets, projectSe
|
|
|
13
12
|
const hasLoaded = useRef(false);
|
|
14
13
|
const loadingStart = useRef(new Date().getTime());
|
|
15
14
|
const { sessionValidation } = useLoadingAndLifecycle();
|
|
16
|
-
const connectorsInitializingState = useConnectorsInitializing();
|
|
17
|
-
const isWaitingForConnectorsInitialization = useMemo(() => Object.values(connectorsInitializingState).some(Boolean), [connectorsInitializingState]);
|
|
18
15
|
const isFetchingNonce = useMemo(() => shouldFetchNonce({
|
|
19
16
|
authMode,
|
|
20
17
|
}) && !nonce, [authMode, nonce]);
|
|
@@ -55,14 +52,12 @@ const useGlobalLoading = ({ authMode, connectedInfo, connectedWallets, projectSe
|
|
|
55
52
|
connectedWallets.length === 0;
|
|
56
53
|
const isValidatingSession = !sessionValidation;
|
|
57
54
|
logger.logVerboseTroubleshootingMessage('[useGlobalLoading] SDK loading', {
|
|
58
|
-
connectorsInitializingState,
|
|
59
55
|
isConnectOnlyWalletsLoading,
|
|
60
56
|
isFetchingNonce,
|
|
61
57
|
isPrimaryWalletLoading,
|
|
62
58
|
isProjectSettingsLoading,
|
|
63
59
|
isUserLoading,
|
|
64
60
|
isValidatingSession,
|
|
65
|
-
isWaitingForConnectorsInitialization,
|
|
66
61
|
isWalletBookLoading,
|
|
67
62
|
});
|
|
68
63
|
if (!isWalletBookLoading &&
|
|
@@ -71,8 +66,7 @@ const useGlobalLoading = ({ authMode, connectedInfo, connectedWallets, projectSe
|
|
|
71
66
|
!isPrimaryWalletLoading &&
|
|
72
67
|
!isConnectOnlyWalletsLoading &&
|
|
73
68
|
!isValidatingSession &&
|
|
74
|
-
!isFetchingNonce
|
|
75
|
-
!isWaitingForConnectorsInitialization) {
|
|
69
|
+
!isFetchingNonce) {
|
|
76
70
|
finishLoading();
|
|
77
71
|
}
|
|
78
72
|
return hasLoaded.current;
|
|
@@ -144,11 +144,15 @@ const useSocialAccounts = () => {
|
|
|
144
144
|
}
|
|
145
145
|
return true;
|
|
146
146
|
}, [handleError, projectSettings]);
|
|
147
|
-
const linkSocialAccount = React.useCallback((provider_1, ...args_1) => _tslib.__awaiter(void 0, [provider_1, ...args_1], void 0, function* (provider, { redirectUrl } = {
|
|
147
|
+
const linkSocialAccount = React.useCallback((provider_1, ...args_1) => _tslib.__awaiter(void 0, [provider_1, ...args_1], void 0, function* (provider, { redirectUrl, showWidgetAfterConnection } = {
|
|
148
|
+
redirectUrl: undefined,
|
|
149
|
+
showWidgetAfterConnection: false,
|
|
150
|
+
}) {
|
|
148
151
|
connectSocialAccount({
|
|
149
152
|
authMode: 'link',
|
|
150
153
|
provider,
|
|
151
154
|
redirectUrl,
|
|
155
|
+
showWidgetAfterConnection,
|
|
152
156
|
validator: checkValidOAuthLinking,
|
|
153
157
|
});
|
|
154
158
|
}), [checkValidOAuthLinking, connectSocialAccount]);
|
|
@@ -5,6 +5,10 @@ type ConnectSocialProps = {
|
|
|
5
5
|
* Overrides the redirectUrl provided by DynamicContextProvider
|
|
6
6
|
*/
|
|
7
7
|
redirectUrl?: string;
|
|
8
|
+
/**
|
|
9
|
+
* Whether to show the widget after a connection is made
|
|
10
|
+
*/
|
|
11
|
+
showWidgetAfterConnection?: boolean;
|
|
8
12
|
};
|
|
9
13
|
export declare const useSocialAccounts: () => {
|
|
10
14
|
readonly error: import("@dynamic-labs/types").SocialOAuthError | undefined;
|
|
@@ -12,7 +16,7 @@ export declare const useSocialAccounts: () => {
|
|
|
12
16
|
readonly getLinkedAccounts: (provider: ProviderEnum) => SocialAccountInformation[];
|
|
13
17
|
readonly isLinked: (provider: ProviderEnum) => boolean;
|
|
14
18
|
readonly isProcessing: boolean;
|
|
15
|
-
readonly linkSocialAccount: (provider: ProviderEnum, { redirectUrl }?: ConnectSocialProps) => Promise<void>;
|
|
19
|
+
readonly linkSocialAccount: (provider: ProviderEnum, { redirectUrl, showWidgetAfterConnection }?: ConnectSocialProps) => Promise<void>;
|
|
16
20
|
readonly signInWithSocialAccount: (provider: ProviderEnum, { redirectUrl }?: ConnectSocialProps) => Promise<void>;
|
|
17
21
|
readonly unlinkSocialAccount: (provider: ProviderEnum, verifiedCredentialId?: string) => Promise<void>;
|
|
18
22
|
};
|
|
@@ -140,11 +140,15 @@ const useSocialAccounts = () => {
|
|
|
140
140
|
}
|
|
141
141
|
return true;
|
|
142
142
|
}, [handleError, projectSettings]);
|
|
143
|
-
const linkSocialAccount = useCallback((provider_1, ...args_1) => __awaiter(void 0, [provider_1, ...args_1], void 0, function* (provider, { redirectUrl } = {
|
|
143
|
+
const linkSocialAccount = useCallback((provider_1, ...args_1) => __awaiter(void 0, [provider_1, ...args_1], void 0, function* (provider, { redirectUrl, showWidgetAfterConnection } = {
|
|
144
|
+
redirectUrl: undefined,
|
|
145
|
+
showWidgetAfterConnection: false,
|
|
146
|
+
}) {
|
|
144
147
|
connectSocialAccount({
|
|
145
148
|
authMode: 'link',
|
|
146
149
|
provider,
|
|
147
150
|
redirectUrl,
|
|
151
|
+
showWidgetAfterConnection,
|
|
148
152
|
validator: checkValidOAuthLinking,
|
|
149
153
|
});
|
|
150
154
|
}), [checkValidOAuthLinking, connectSocialAccount]);
|
|
@@ -354,7 +354,7 @@ const useSocialAuth = ({ onSettled, onError, onFarcasterUrl, }) => {
|
|
|
354
354
|
shouldRegisterSessionKeysOnSignin,
|
|
355
355
|
signInAccount,
|
|
356
356
|
]);
|
|
357
|
-
const connectSocialAccount = React.useCallback((_c) => _tslib.__awaiter(void 0, [_c], void 0, function* ({ authMode, provider, validator, captchaToken, redirectUrl, telegramAuthToken, }) {
|
|
357
|
+
const connectSocialAccount = React.useCallback((_c) => _tslib.__awaiter(void 0, [_c], void 0, function* ({ authMode, provider, validator, captchaToken, redirectUrl, telegramAuthToken, showWidgetAfterConnection, }) {
|
|
358
358
|
var _d, _e;
|
|
359
359
|
clearError();
|
|
360
360
|
setIsProcessing(true);
|
|
@@ -388,6 +388,7 @@ const useSocialAuth = ({ onSettled, onError, onFarcasterUrl, }) => {
|
|
|
388
388
|
captchaToken,
|
|
389
389
|
codeVerifier: usingPkce ? verifier : undefined,
|
|
390
390
|
mode: authMode,
|
|
391
|
+
showWidgetAfterConnection,
|
|
391
392
|
state,
|
|
392
393
|
});
|
|
393
394
|
const loginUrlString = getOauthLoginUrl.getOauthLoginUrl((_d = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.providers) !== null && _d !== void 0 ? _d : [], provider);
|
|
@@ -14,6 +14,7 @@ export type ConnectSocialAccountProps = {
|
|
|
14
14
|
captchaToken?: string;
|
|
15
15
|
redirectUrl?: string;
|
|
16
16
|
telegramAuthToken?: string;
|
|
17
|
+
showWidgetAfterConnection?: boolean;
|
|
17
18
|
};
|
|
18
19
|
export declare const useSocialAuth: ({ onSettled, onError, onFarcasterUrl, }: UseSocialAuthProps) => {
|
|
19
20
|
readonly checkValidProvider: (provider: ProviderEnum, authMode: SocialAuthMode) => boolean;
|
|
@@ -27,7 +28,7 @@ export declare const useSocialAuth: ({ onSettled, onError, onFarcasterUrl, }: Us
|
|
|
27
28
|
telegramAuthToken?: string | undefined;
|
|
28
29
|
forceCreateUser?: boolean | undefined;
|
|
29
30
|
}) => Promise<void>;
|
|
30
|
-
readonly connectSocialAccount: ({ authMode, provider, validator, captchaToken, redirectUrl, telegramAuthToken, }: ConnectSocialAccountProps) => Promise<void>;
|
|
31
|
+
readonly connectSocialAccount: ({ authMode, provider, validator, captchaToken, redirectUrl, telegramAuthToken, showWidgetAfterConnection, }: ConnectSocialAccountProps) => Promise<void>;
|
|
31
32
|
readonly error: SocialOAuthError | undefined;
|
|
32
33
|
readonly handleError: (provider: ProviderEnum | undefined, code: SocialOAuthErrorCode, message: string, options?: {
|
|
33
34
|
raiseAuthFailure?: boolean | undefined;
|
|
@@ -350,7 +350,7 @@ const useSocialAuth = ({ onSettled, onError, onFarcasterUrl, }) => {
|
|
|
350
350
|
shouldRegisterSessionKeysOnSignin,
|
|
351
351
|
signInAccount,
|
|
352
352
|
]);
|
|
353
|
-
const connectSocialAccount = useCallback((_c) => __awaiter(void 0, [_c], void 0, function* ({ authMode, provider, validator, captchaToken, redirectUrl, telegramAuthToken, }) {
|
|
353
|
+
const connectSocialAccount = useCallback((_c) => __awaiter(void 0, [_c], void 0, function* ({ authMode, provider, validator, captchaToken, redirectUrl, telegramAuthToken, showWidgetAfterConnection, }) {
|
|
354
354
|
var _d, _e;
|
|
355
355
|
clearError();
|
|
356
356
|
setIsProcessing(true);
|
|
@@ -384,6 +384,7 @@ const useSocialAuth = ({ onSettled, onError, onFarcasterUrl, }) => {
|
|
|
384
384
|
captchaToken,
|
|
385
385
|
codeVerifier: usingPkce ? verifier : undefined,
|
|
386
386
|
mode: authMode,
|
|
387
|
+
showWidgetAfterConnection,
|
|
387
388
|
state,
|
|
388
389
|
});
|
|
389
390
|
const loginUrlString = getOauthLoginUrl((_d = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.providers) !== null && _d !== void 0 ? _d : [], provider);
|
|
@@ -108,7 +108,7 @@ const useUserAuth = ({ authMethod, }) => {
|
|
|
108
108
|
const { setErrorMessage, setError } = ErrorContext.useErrorContext();
|
|
109
109
|
const { setExistentAccountData } = AccountExistsContext.useAccountExistsContext();
|
|
110
110
|
const handleAuthenticatedUser = useHandleAuthenticatedUser.useHandleAuthenticatedUser();
|
|
111
|
-
const { shouldAutoCreateEmbeddedWallet, shouldPromptForKeyExport } = useEmbeddedWallet.useEmbeddedWallet();
|
|
111
|
+
const { shouldAutoCreateEmbeddedWallet, shouldPromptForKeyExport, embeddedWalletSettingVersion, } = useEmbeddedWallet.useEmbeddedWallet();
|
|
112
112
|
const isVerifyResponse = (response) => response.user;
|
|
113
113
|
const initAuth = (_a) => _tslib.__awaiter(void 0, [_a], void 0, function* ({ isSignIn = true, verifyFunction, onVerifySuccess, onSettled, onError, showSuccessMessage = false, skipDefaultErrorHandling = false, }) {
|
|
114
114
|
var _b;
|
|
@@ -145,6 +145,7 @@ const useUserAuth = ({ authMethod, }) => {
|
|
|
145
145
|
// we should only close auth flow if no wallet is going to be created or there is no key export
|
|
146
146
|
// otherwise there will be a glitch with auth flow closing and then reopening for passkeys or export
|
|
147
147
|
const shouldCreateWallet = shouldAutoCreateEmbeddedWallet(verifiedUser);
|
|
148
|
+
// only support export prompt on v2 and higher
|
|
148
149
|
const shouldPromptExport = shouldPromptForKeyExport();
|
|
149
150
|
if (showSuccessMessage) {
|
|
150
151
|
// this timeout is set to make sure that the user will see success message
|
|
@@ -153,7 +154,12 @@ const useUserAuth = ({ authMethod, }) => {
|
|
|
153
154
|
if (isSignIn) {
|
|
154
155
|
setCallback('authSuccess');
|
|
155
156
|
}
|
|
156
|
-
|
|
157
|
+
const walletVersion = embeddedWalletSettingVersion();
|
|
158
|
+
if (walletVersion === sdkApiCore.EmbeddedWalletVersionEnum.V1 &&
|
|
159
|
+
shouldCreateWallet) {
|
|
160
|
+
setShowAuthFlow(true);
|
|
161
|
+
}
|
|
162
|
+
else if (!shouldCreateWallet || !shouldPromptExport) {
|
|
157
163
|
setShowAuthFlow(false);
|
|
158
164
|
}
|
|
159
165
|
onSettled === null || onSettled === void 0 ? void 0 : onSettled();
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use client'
|
|
2
2
|
import { __awaiter } from '../../../../../_virtual/_tslib.js';
|
|
3
3
|
import { DynamicError, MfaInvalidOtpError, MfaRateLimitedError, EmailAlreadyExistsError, CustomFieldNotUniqueError, UsernameAlreadyExistsError, TooManyEmailVerificationsError, InvalidPhoneNumberError, NoAccessError, AccountExistsError, SandboxMaximumThresholdReachedError, UserHasAccountWithEmailError, sleep } from '@dynamic-labs/utils';
|
|
4
|
-
import { MfaBackupCodeAcknowledgement } from '@dynamic-labs/sdk-api-core';
|
|
4
|
+
import { EmbeddedWalletVersionEnum, MfaBackupCodeAcknowledgement } from '@dynamic-labs/sdk-api-core';
|
|
5
5
|
import { useAccountExistsContext } from '../../../context/AccountExistsContext/AccountExistsContext.js';
|
|
6
6
|
import 'react';
|
|
7
7
|
import '../../../context/DynamicContext/DynamicContext.js';
|
|
@@ -104,7 +104,7 @@ const useUserAuth = ({ authMethod, }) => {
|
|
|
104
104
|
const { setErrorMessage, setError } = useErrorContext();
|
|
105
105
|
const { setExistentAccountData } = useAccountExistsContext();
|
|
106
106
|
const handleAuthenticatedUser = useHandleAuthenticatedUser();
|
|
107
|
-
const { shouldAutoCreateEmbeddedWallet, shouldPromptForKeyExport } = useEmbeddedWallet();
|
|
107
|
+
const { shouldAutoCreateEmbeddedWallet, shouldPromptForKeyExport, embeddedWalletSettingVersion, } = useEmbeddedWallet();
|
|
108
108
|
const isVerifyResponse = (response) => response.user;
|
|
109
109
|
const initAuth = (_a) => __awaiter(void 0, [_a], void 0, function* ({ isSignIn = true, verifyFunction, onVerifySuccess, onSettled, onError, showSuccessMessage = false, skipDefaultErrorHandling = false, }) {
|
|
110
110
|
var _b;
|
|
@@ -141,6 +141,7 @@ const useUserAuth = ({ authMethod, }) => {
|
|
|
141
141
|
// we should only close auth flow if no wallet is going to be created or there is no key export
|
|
142
142
|
// otherwise there will be a glitch with auth flow closing and then reopening for passkeys or export
|
|
143
143
|
const shouldCreateWallet = shouldAutoCreateEmbeddedWallet(verifiedUser);
|
|
144
|
+
// only support export prompt on v2 and higher
|
|
144
145
|
const shouldPromptExport = shouldPromptForKeyExport();
|
|
145
146
|
if (showSuccessMessage) {
|
|
146
147
|
// this timeout is set to make sure that the user will see success message
|
|
@@ -149,7 +150,12 @@ const useUserAuth = ({ authMethod, }) => {
|
|
|
149
150
|
if (isSignIn) {
|
|
150
151
|
setCallback('authSuccess');
|
|
151
152
|
}
|
|
152
|
-
|
|
153
|
+
const walletVersion = embeddedWalletSettingVersion();
|
|
154
|
+
if (walletVersion === EmbeddedWalletVersionEnum.V1 &&
|
|
155
|
+
shouldCreateWallet) {
|
|
156
|
+
setShowAuthFlow(true);
|
|
157
|
+
}
|
|
158
|
+
else if (!shouldCreateWallet || !shouldPromptExport) {
|
|
153
159
|
setShowAuthFlow(false);
|
|
154
160
|
}
|
|
155
161
|
onSettled === null || onSettled === void 0 ? void 0 : onSettled();
|
package/src/lib/utils/hooks/useWalletItemActions/useHandleWalletItem/useHandleWalletItem.cjs
CHANGED
|
@@ -211,6 +211,10 @@ const useHandleWalletItem = ({ allowAlreadyConnectedWallet, onQrCodeConnect, onC
|
|
|
211
211
|
const { walletConnector, isInstalledOnBrowser } = wallet;
|
|
212
212
|
const shouldEndWalletConnectorSession = walletConnector.connectedChain === 'FLOW' ||
|
|
213
213
|
walletConnectorCore.isPhantomRedirectConnector(walletConnector) ||
|
|
214
|
+
// because WC only supports one connection at a time,
|
|
215
|
+
// we need to end the session (disconnect) when the user selects
|
|
216
|
+
// a different wallet to connect with
|
|
217
|
+
// a new connection is established a few steps further down
|
|
214
218
|
walletConnectorCore.isWalletConnectConnector(walletConnector);
|
|
215
219
|
logger.logger.logVerboseTroubleshootingMessage('[handleWalletItemClick]', {
|
|
216
220
|
mockedSDK,
|
|
@@ -207,6 +207,10 @@ const useHandleWalletItem = ({ allowAlreadyConnectedWallet, onQrCodeConnect, onC
|
|
|
207
207
|
const { walletConnector, isInstalledOnBrowser } = wallet;
|
|
208
208
|
const shouldEndWalletConnectorSession = walletConnector.connectedChain === 'FLOW' ||
|
|
209
209
|
isPhantomRedirectConnector(walletConnector) ||
|
|
210
|
+
// because WC only supports one connection at a time,
|
|
211
|
+
// we need to end the session (disconnect) when the user selects
|
|
212
|
+
// a different wallet to connect with
|
|
213
|
+
// a new connection is established a few steps further down
|
|
210
214
|
isWalletConnectConnector(walletConnector);
|
|
211
215
|
logger.logVerboseTroubleshootingMessage('[handleWalletItemClick]', {
|
|
212
216
|
mockedSDK,
|
package/src/lib/widgets/DynamicEmbeddedWidget/DynamicEmbeddedAuthFlow/DynamicEmbeddedAuthFlow.cjs
CHANGED
|
@@ -102,14 +102,12 @@ var SandboxIndicatorWrapper = require('../../../components/SandboxIndicatorWrapp
|
|
|
102
102
|
|
|
103
103
|
const DynamicEmbeddedAuthFlow = ({ background = 'none', className, style, }) => {
|
|
104
104
|
const hide = useIsLoggedIn.useIsLoggedIn();
|
|
105
|
-
const { projectSettings,
|
|
105
|
+
const { projectSettings, isRenderingEmbeddedAuthFlow } = useInternalDynamicContext.useInternalDynamicContext();
|
|
106
|
+
isRenderingEmbeddedAuthFlow.current = !hide;
|
|
106
107
|
// Keep isRenderingEmbeddedAuthFlow up to date
|
|
107
|
-
React.useEffect(() => {
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
setIsRenderingEmbeddedAuthFlow(false);
|
|
111
|
-
};
|
|
112
|
-
}, [setIsRenderingEmbeddedAuthFlow, hide]);
|
|
108
|
+
React.useEffect(() => () => {
|
|
109
|
+
isRenderingEmbeddedAuthFlow.current = false;
|
|
110
|
+
}, [isRenderingEmbeddedAuthFlow]);
|
|
113
111
|
if (hide)
|
|
114
112
|
return null;
|
|
115
113
|
const content = (jsxRuntime.jsx(DynamicAuthLayout.DynamicAuthLayout, { className: className, style: style, projectSettings: projectSettings, children: jsxRuntime.jsx(RenderView.RenderView, {}) }));
|
package/src/lib/widgets/DynamicEmbeddedWidget/DynamicEmbeddedAuthFlow/DynamicEmbeddedAuthFlow.js
CHANGED
|
@@ -98,14 +98,12 @@ import { SandboxIndicatorWrapper } from '../../../components/SandboxIndicatorWra
|
|
|
98
98
|
|
|
99
99
|
const DynamicEmbeddedAuthFlow = ({ background = 'none', className, style, }) => {
|
|
100
100
|
const hide = useIsLoggedIn();
|
|
101
|
-
const { projectSettings,
|
|
101
|
+
const { projectSettings, isRenderingEmbeddedAuthFlow } = useInternalDynamicContext();
|
|
102
|
+
isRenderingEmbeddedAuthFlow.current = !hide;
|
|
102
103
|
// Keep isRenderingEmbeddedAuthFlow up to date
|
|
103
|
-
useEffect(() => {
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
setIsRenderingEmbeddedAuthFlow(false);
|
|
107
|
-
};
|
|
108
|
-
}, [setIsRenderingEmbeddedAuthFlow, hide]);
|
|
104
|
+
useEffect(() => () => {
|
|
105
|
+
isRenderingEmbeddedAuthFlow.current = false;
|
|
106
|
+
}, [isRenderingEmbeddedAuthFlow]);
|
|
109
107
|
if (hide)
|
|
110
108
|
return null;
|
|
111
109
|
const content = (jsx(DynamicAuthLayout, { className: className, style: style, projectSettings: projectSettings, children: jsx(RenderView, {}) }));
|
|
@@ -95,14 +95,23 @@ require('../../components/IsBrowser/IsBrowser.cjs');
|
|
|
95
95
|
require('../../components/Popper/Popper/Popper.cjs');
|
|
96
96
|
require('../../components/Popper/PopperContext/PopperContext.cjs');
|
|
97
97
|
|
|
98
|
+
/**
|
|
99
|
+
* Widget for displaying iframe-based onramp providers
|
|
100
|
+
* Note: Popup-based providers (like Coinbase) are handled separately in their onClick handlers
|
|
101
|
+
*/
|
|
98
102
|
const OnrampWidget = () => {
|
|
99
103
|
const { showOnramp, selectedOnramp, onrampEnabled, setShowOnramp } = OnrampContext.useOnrampContext();
|
|
100
104
|
const [onrampRef, setOnrampRef] = React.useState(null);
|
|
101
105
|
index.useOnClickOutside(onrampRef, () => setShowOnramp(false));
|
|
102
|
-
|
|
106
|
+
const shouldRenderWidget = onrampEnabled &&
|
|
107
|
+
selectedOnramp &&
|
|
108
|
+
selectedOnramp.openMode === 'iframe' &&
|
|
109
|
+
selectedOnramp.url;
|
|
110
|
+
// If onramp is not enabled or there's no selected onramp, don't render anything
|
|
111
|
+
if (!shouldRenderWidget) {
|
|
103
112
|
return null;
|
|
104
113
|
}
|
|
105
|
-
return (jsxRuntime.jsx(ShadowDOM.ShadowDOM, { children: jsxRuntime.jsxs(OpacityTransition.OpacityTransition, { isShown: showOnramp, children: [jsxRuntime.jsx("div", { className: 'onramp-widget__backdrop', "aria-hidden": 'true', "data-testid": 'onramp-widget-backdrop' }), jsxRuntime.jsx("div", { className: 'onramp-widget__modal', children: jsxRuntime.jsx("iframe", { id: 'onramp-iframe', src: selectedOnramp.
|
|
114
|
+
return (jsxRuntime.jsx(ShadowDOM.ShadowDOM, { children: jsxRuntime.jsxs(OpacityTransition.OpacityTransition, { isShown: showOnramp, children: [jsxRuntime.jsx("div", { className: 'onramp-widget__backdrop', "aria-hidden": 'true', "data-testid": 'onramp-widget-backdrop' }), jsxRuntime.jsx("div", { className: 'onramp-widget__modal', children: jsxRuntime.jsx("iframe", { id: 'onramp-iframe', src: selectedOnramp.url, allow: 'camera *;geolocation *', title: 'Crypto Onramp', ref: setOnrampRef, "data-testid": 'onramp-widget-modal' }) })] }) }));
|
|
106
115
|
};
|
|
107
116
|
|
|
108
117
|
exports.OnrampWidget = OnrampWidget;
|
|
@@ -91,14 +91,23 @@ import '../../components/IsBrowser/IsBrowser.js';
|
|
|
91
91
|
import '../../components/Popper/Popper/Popper.js';
|
|
92
92
|
import '../../components/Popper/PopperContext/PopperContext.js';
|
|
93
93
|
|
|
94
|
+
/**
|
|
95
|
+
* Widget for displaying iframe-based onramp providers
|
|
96
|
+
* Note: Popup-based providers (like Coinbase) are handled separately in their onClick handlers
|
|
97
|
+
*/
|
|
94
98
|
const OnrampWidget = () => {
|
|
95
99
|
const { showOnramp, selectedOnramp, onrampEnabled, setShowOnramp } = useOnrampContext();
|
|
96
100
|
const [onrampRef, setOnrampRef] = useState(null);
|
|
97
101
|
useOnClickOutside(onrampRef, () => setShowOnramp(false));
|
|
98
|
-
|
|
102
|
+
const shouldRenderWidget = onrampEnabled &&
|
|
103
|
+
selectedOnramp &&
|
|
104
|
+
selectedOnramp.openMode === 'iframe' &&
|
|
105
|
+
selectedOnramp.url;
|
|
106
|
+
// If onramp is not enabled or there's no selected onramp, don't render anything
|
|
107
|
+
if (!shouldRenderWidget) {
|
|
99
108
|
return null;
|
|
100
109
|
}
|
|
101
|
-
return (jsx(ShadowDOM, { children: jsxs(OpacityTransition, { isShown: showOnramp, children: [jsx("div", { className: 'onramp-widget__backdrop', "aria-hidden": 'true', "data-testid": 'onramp-widget-backdrop' }), jsx("div", { className: 'onramp-widget__modal', children: jsx("iframe", { id: 'onramp-iframe', src: selectedOnramp.
|
|
110
|
+
return (jsx(ShadowDOM, { children: jsxs(OpacityTransition, { isShown: showOnramp, children: [jsx("div", { className: 'onramp-widget__backdrop', "aria-hidden": 'true', "data-testid": 'onramp-widget-backdrop' }), jsx("div", { className: 'onramp-widget__modal', children: jsx("iframe", { id: 'onramp-iframe', src: selectedOnramp.url, allow: 'camera *;geolocation *', title: 'Crypto Onramp', ref: setOnrampRef, "data-testid": 'onramp-widget-modal' }) })] }) }));
|
|
102
111
|
};
|
|
103
112
|
|
|
104
113
|
export { OnrampWidget };
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
'use client'
|
|
2
|
-
'use strict';
|
|
3
|
-
|
|
4
|
-
Object.defineProperty(exports, '__esModule', { value: true });
|
|
5
|
-
|
|
6
|
-
const formatCoinbaseOnrampUrl = (url, wallet) => {
|
|
7
|
-
if (wallet) {
|
|
8
|
-
const networks = wallet.connector.getEnabledNetworks();
|
|
9
|
-
if (!networks || networks.length === 0) {
|
|
10
|
-
return url;
|
|
11
|
-
}
|
|
12
|
-
const filteredNetworks = networks.filter((network) => !network.isTestnet);
|
|
13
|
-
const onlyKeys = filteredNetworks
|
|
14
|
-
.filter((network) => Boolean(network.key)) // filter out networks without keys
|
|
15
|
-
.map((network) => network.key);
|
|
16
|
-
const addressesObj = {
|
|
17
|
-
[wallet.address]: onlyKeys,
|
|
18
|
-
};
|
|
19
|
-
const baseUrl = new URL(url);
|
|
20
|
-
// Construct the URL with the raw query parameters
|
|
21
|
-
const finalUrl = `${baseUrl.origin}${baseUrl.pathname}?appId=${baseUrl.searchParams.get('appId')}&addresses=${encodeURIComponent(JSON.stringify(addressesObj))}`;
|
|
22
|
-
return finalUrl;
|
|
23
|
-
}
|
|
24
|
-
return url;
|
|
25
|
-
};
|
|
26
|
-
|
|
27
|
-
exports.formatCoinbaseOnrampUrl = formatCoinbaseOnrampUrl;
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
'use client'
|
|
2
|
-
const formatCoinbaseOnrampUrl = (url, wallet) => {
|
|
3
|
-
if (wallet) {
|
|
4
|
-
const networks = wallet.connector.getEnabledNetworks();
|
|
5
|
-
if (!networks || networks.length === 0) {
|
|
6
|
-
return url;
|
|
7
|
-
}
|
|
8
|
-
const filteredNetworks = networks.filter((network) => !network.isTestnet);
|
|
9
|
-
const onlyKeys = filteredNetworks
|
|
10
|
-
.filter((network) => Boolean(network.key)) // filter out networks without keys
|
|
11
|
-
.map((network) => network.key);
|
|
12
|
-
const addressesObj = {
|
|
13
|
-
[wallet.address]: onlyKeys,
|
|
14
|
-
};
|
|
15
|
-
const baseUrl = new URL(url);
|
|
16
|
-
// Construct the URL with the raw query parameters
|
|
17
|
-
const finalUrl = `${baseUrl.origin}${baseUrl.pathname}?appId=${baseUrl.searchParams.get('appId')}&addresses=${encodeURIComponent(JSON.stringify(addressesObj))}`;
|
|
18
|
-
return finalUrl;
|
|
19
|
-
}
|
|
20
|
-
return url;
|
|
21
|
-
};
|
|
22
|
-
|
|
23
|
-
export { formatCoinbaseOnrampUrl };
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { formatCoinbaseOnrampUrl } from './formatCoinbaseOnrampUrl';
|