@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.
Files changed (66) hide show
  1. package/CHANGELOG.md +13 -2
  2. package/package.cjs +1 -1
  3. package/package.js +1 -1
  4. package/package.json +11 -11
  5. package/src/index.cjs +2 -0
  6. package/src/index.d.ts +4 -3
  7. package/src/index.js +1 -0
  8. package/src/lib/components/NetworkPicker/components/NetworkDropdown/NetworkDropdown.cjs +11 -2
  9. package/src/lib/components/NetworkPicker/components/NetworkDropdown/NetworkDropdown.js +11 -2
  10. package/src/lib/components/UserProfile/parts/UserProfileSocialAccount/UserProfileSocialAccount.cjs +10 -4
  11. package/src/lib/components/UserProfile/parts/UserProfileSocialAccount/UserProfileSocialAccount.js +10 -4
  12. package/src/lib/context/DynamicContext/DynamicContext.cjs +1 -3
  13. package/src/lib/context/DynamicContext/DynamicContext.js +2 -4
  14. package/src/lib/context/DynamicContext/hooks/useShowAuthFlow/useShowAuthFlow.cjs +1 -1
  15. package/src/lib/context/DynamicContext/hooks/useShowAuthFlow/useShowAuthFlow.js +1 -1
  16. package/src/lib/context/DynamicContext/types/IDynamicContext.d.ts +2 -3
  17. package/src/lib/context/DynamicContext/types/SettingsOverrides.d.ts +12 -5
  18. package/src/lib/context/OnrampContext/useEnabledOnrampProviders/useEnabledOnrampProviders.cjs +18 -1
  19. package/src/lib/context/OnrampContext/useEnabledOnrampProviders/useEnabledOnrampProviders.d.ts +2 -2
  20. package/src/lib/context/OnrampContext/useEnabledOnrampProviders/useEnabledOnrampProviders.js +19 -2
  21. package/src/lib/context/SocialRedirectContext/hooks/useRedirectSocialHandler/useRedirectSocialHandler.cjs +6 -6
  22. package/src/lib/context/SocialRedirectContext/hooks/useRedirectSocialHandler/useRedirectSocialHandler.js +6 -6
  23. package/src/lib/utils/functions/findWalletOptionFor/findWalletOptionFor.cjs +1 -1
  24. package/src/lib/utils/functions/findWalletOptionFor/findWalletOptionFor.js +1 -1
  25. package/src/lib/utils/functions/generateMessages/index.cjs +19 -9
  26. package/src/lib/utils/functions/generateMessages/index.js +19 -9
  27. package/src/lib/utils/functions/index.d.ts +0 -1
  28. package/src/lib/utils/functions/onrampConfigurationToOnrampOption/onrampConfigurationToOnrampOption.cjs +31 -18
  29. package/src/lib/utils/functions/onrampConfigurationToOnrampOption/onrampConfigurationToOnrampOption.d.ts +3 -0
  30. package/src/lib/utils/functions/onrampConfigurationToOnrampOption/onrampConfigurationToOnrampOption.js +31 -18
  31. package/src/lib/utils/functions/onrampProviders/coinbase.cjs +55 -0
  32. package/src/lib/utils/functions/onrampProviders/coinbase.d.ts +15 -0
  33. package/src/lib/utils/functions/onrampProviders/coinbase.js +50 -0
  34. package/src/lib/utils/functions/onrampProviders/index.cjs +24 -0
  35. package/src/lib/utils/functions/onrampProviders/index.d.ts +11 -0
  36. package/src/lib/utils/functions/onrampProviders/index.js +19 -0
  37. package/src/lib/utils/functions/openOnrampPopup.cjs +8 -5
  38. package/src/lib/utils/functions/openOnrampPopup.d.ts +4 -2
  39. package/src/lib/utils/functions/openOnrampPopup.js +8 -5
  40. package/src/lib/utils/functions/socialStorage/socialStorage.d.ts +2 -0
  41. package/src/lib/utils/hooks/useDynamicWaas/useDynamicWaas.cjs +2 -2
  42. package/src/lib/utils/hooks/useDynamicWaas/useDynamicWaas.js +2 -2
  43. package/src/lib/utils/hooks/useEmbeddedWallet/useEmbeddedWallet.cjs +2 -0
  44. package/src/lib/utils/hooks/useEmbeddedWallet/useEmbeddedWallet.d.ts +2 -1
  45. package/src/lib/utils/hooks/useEmbeddedWallet/useEmbeddedWallet.js +2 -0
  46. package/src/lib/utils/hooks/useGlobalLoading/useGlobalLoading.cjs +1 -7
  47. package/src/lib/utils/hooks/useGlobalLoading/useGlobalLoading.js +1 -7
  48. package/src/lib/utils/hooks/useSocialAccounts/useSocialAccounts.cjs +5 -1
  49. package/src/lib/utils/hooks/useSocialAccounts/useSocialAccounts.d.ts +5 -1
  50. package/src/lib/utils/hooks/useSocialAccounts/useSocialAccounts.js +5 -1
  51. package/src/lib/utils/hooks/useSocialAuth/useSocialAuth.cjs +2 -1
  52. package/src/lib/utils/hooks/useSocialAuth/useSocialAuth.d.ts +2 -1
  53. package/src/lib/utils/hooks/useSocialAuth/useSocialAuth.js +2 -1
  54. package/src/lib/utils/hooks/useUserAuth/useUserAuth.cjs +8 -2
  55. package/src/lib/utils/hooks/useUserAuth/useUserAuth.js +9 -3
  56. package/src/lib/utils/hooks/useWalletItemActions/useHandleWalletItem/useHandleWalletItem.cjs +4 -0
  57. package/src/lib/utils/hooks/useWalletItemActions/useHandleWalletItem/useHandleWalletItem.js +4 -0
  58. package/src/lib/widgets/DynamicEmbeddedWidget/DynamicEmbeddedAuthFlow/DynamicEmbeddedAuthFlow.cjs +5 -7
  59. package/src/lib/widgets/DynamicEmbeddedWidget/DynamicEmbeddedAuthFlow/DynamicEmbeddedAuthFlow.js +5 -7
  60. package/src/lib/widgets/OnrampWidget/OnrampWidget.cjs +11 -2
  61. package/src/lib/widgets/OnrampWidget/OnrampWidget.d.ts +4 -0
  62. package/src/lib/widgets/OnrampWidget/OnrampWidget.js +11 -2
  63. package/src/lib/utils/functions/coinbaseOnramp/formatCoinbaseOnrampUrl.cjs +0 -27
  64. package/src/lib/utils/functions/coinbaseOnramp/formatCoinbaseOnrampUrl.d.ts +0 -2
  65. package/src/lib/utils/functions/coinbaseOnramp/formatCoinbaseOnrampUrl.js +0 -23
  66. 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 } = { redirectUrl: undefined }) {
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 } = { redirectUrl: undefined }) {
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
- if (!shouldCreateWallet && !shouldPromptExport) {
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
- if (!shouldCreateWallet && !shouldPromptExport) {
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();
@@ -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,
@@ -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, setIsRenderingEmbeddedAuthFlow } = useInternalDynamicContext.useInternalDynamicContext();
105
+ const { projectSettings, isRenderingEmbeddedAuthFlow } = useInternalDynamicContext.useInternalDynamicContext();
106
+ isRenderingEmbeddedAuthFlow.current = !hide;
106
107
  // Keep isRenderingEmbeddedAuthFlow up to date
107
- React.useEffect(() => {
108
- setIsRenderingEmbeddedAuthFlow(!hide);
109
- return () => {
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, {}) }));
@@ -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, setIsRenderingEmbeddedAuthFlow } = useInternalDynamicContext();
101
+ const { projectSettings, isRenderingEmbeddedAuthFlow } = useInternalDynamicContext();
102
+ isRenderingEmbeddedAuthFlow.current = !hide;
102
103
  // Keep isRenderingEmbeddedAuthFlow up to date
103
- useEffect(() => {
104
- setIsRenderingEmbeddedAuthFlow(!hide);
105
- return () => {
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
- if (!onrampEnabled || !(selectedOnramp === null || selectedOnramp === void 0 ? void 0 : selectedOnramp.iframeUrl)) {
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.iframeUrl, allow: 'camera *;geolocation *', title: 'Crypto Onramp', ref: setOnrampRef, "data-testid": 'onramp-widget-modal' }) })] }) }));
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;
@@ -1,2 +1,6 @@
1
1
  import { type FC } from 'react';
2
+ /**
3
+ * Widget for displaying iframe-based onramp providers
4
+ * Note: Popup-based providers (like Coinbase) are handled separately in their onClick handlers
5
+ */
2
6
  export declare const OnrampWidget: FC;
@@ -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
- if (!onrampEnabled || !(selectedOnramp === null || selectedOnramp === void 0 ? void 0 : selectedOnramp.iframeUrl)) {
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.iframeUrl, allow: 'camera *;geolocation *', title: 'Crypto Onramp', ref: setOnrampRef, "data-testid": 'onramp-widget-modal' }) })] }) }));
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,2 +0,0 @@
1
- import type { Wallet } from '@dynamic-labs/wallet-connector-core';
2
- export declare const formatCoinbaseOnrampUrl: (url: string, wallet: Wallet) => string;
@@ -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';