@dynamic-labs/sdk-react-core 4.9.0 → 4.9.1

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 (50) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/package.cjs +1 -1
  3. package/package.js +1 -1
  4. package/package.json +11 -11
  5. package/src/lib/components/UserProfile/parts/UserProfileSocialAccount/UserProfileSocialAccount.cjs +10 -4
  6. package/src/lib/components/UserProfile/parts/UserProfileSocialAccount/UserProfileSocialAccount.js +10 -4
  7. package/src/lib/context/DynamicContext/types/SettingsOverrides.d.ts +12 -5
  8. package/src/lib/context/OnrampContext/useEnabledOnrampProviders/useEnabledOnrampProviders.cjs +18 -1
  9. package/src/lib/context/OnrampContext/useEnabledOnrampProviders/useEnabledOnrampProviders.d.ts +2 -2
  10. package/src/lib/context/OnrampContext/useEnabledOnrampProviders/useEnabledOnrampProviders.js +19 -2
  11. package/src/lib/context/SocialRedirectContext/hooks/useRedirectSocialHandler/useRedirectSocialHandler.cjs +5 -5
  12. package/src/lib/context/SocialRedirectContext/hooks/useRedirectSocialHandler/useRedirectSocialHandler.js +5 -5
  13. package/src/lib/utils/functions/findWalletOptionFor/findWalletOptionFor.cjs +1 -1
  14. package/src/lib/utils/functions/findWalletOptionFor/findWalletOptionFor.js +1 -1
  15. package/src/lib/utils/functions/generateMessages/index.cjs +19 -9
  16. package/src/lib/utils/functions/generateMessages/index.js +19 -9
  17. package/src/lib/utils/functions/index.d.ts +0 -1
  18. package/src/lib/utils/functions/onrampConfigurationToOnrampOption/onrampConfigurationToOnrampOption.cjs +31 -18
  19. package/src/lib/utils/functions/onrampConfigurationToOnrampOption/onrampConfigurationToOnrampOption.d.ts +3 -0
  20. package/src/lib/utils/functions/onrampConfigurationToOnrampOption/onrampConfigurationToOnrampOption.js +31 -18
  21. package/src/lib/utils/functions/onrampProviders/coinbase.cjs +55 -0
  22. package/src/lib/utils/functions/onrampProviders/coinbase.d.ts +15 -0
  23. package/src/lib/utils/functions/onrampProviders/coinbase.js +50 -0
  24. package/src/lib/utils/functions/onrampProviders/index.cjs +24 -0
  25. package/src/lib/utils/functions/onrampProviders/index.d.ts +11 -0
  26. package/src/lib/utils/functions/onrampProviders/index.js +19 -0
  27. package/src/lib/utils/functions/openOnrampPopup.cjs +8 -5
  28. package/src/lib/utils/functions/openOnrampPopup.d.ts +4 -2
  29. package/src/lib/utils/functions/openOnrampPopup.js +8 -5
  30. package/src/lib/utils/functions/socialStorage/socialStorage.d.ts +2 -0
  31. package/src/lib/utils/hooks/useDynamicWaas/useDynamicWaas.cjs +2 -2
  32. package/src/lib/utils/hooks/useDynamicWaas/useDynamicWaas.js +2 -2
  33. package/src/lib/utils/hooks/useEmbeddedWallet/useEmbeddedWallet.cjs +2 -0
  34. package/src/lib/utils/hooks/useEmbeddedWallet/useEmbeddedWallet.d.ts +2 -1
  35. package/src/lib/utils/hooks/useEmbeddedWallet/useEmbeddedWallet.js +2 -0
  36. package/src/lib/utils/hooks/useSocialAccounts/useSocialAccounts.cjs +5 -1
  37. package/src/lib/utils/hooks/useSocialAccounts/useSocialAccounts.d.ts +5 -1
  38. package/src/lib/utils/hooks/useSocialAccounts/useSocialAccounts.js +5 -1
  39. package/src/lib/utils/hooks/useSocialAuth/useSocialAuth.cjs +2 -1
  40. package/src/lib/utils/hooks/useSocialAuth/useSocialAuth.d.ts +2 -1
  41. package/src/lib/utils/hooks/useSocialAuth/useSocialAuth.js +2 -1
  42. package/src/lib/utils/hooks/useUserAuth/useUserAuth.cjs +8 -2
  43. package/src/lib/utils/hooks/useUserAuth/useUserAuth.js +9 -3
  44. package/src/lib/widgets/OnrampWidget/OnrampWidget.cjs +11 -2
  45. package/src/lib/widgets/OnrampWidget/OnrampWidget.d.ts +4 -0
  46. package/src/lib/widgets/OnrampWidget/OnrampWidget.js +11 -2
  47. package/src/lib/utils/functions/coinbaseOnramp/formatCoinbaseOnrampUrl.cjs +0 -27
  48. package/src/lib/utils/functions/coinbaseOnramp/formatCoinbaseOnrampUrl.d.ts +0 -2
  49. package/src/lib/utils/functions/coinbaseOnramp/formatCoinbaseOnrampUrl.js +0 -23
  50. package/src/lib/utils/functions/coinbaseOnramp/index.d.ts +0 -1
@@ -0,0 +1,50 @@
1
+ 'use client'
2
+ /**
3
+ * Gets the enabled non-testnet networks for a wallet
4
+ * @param wallet User's wallet
5
+ * @returns Array of enabled non-testnet networks, or empty array if no wallet or networks
6
+ */
7
+ const getEnabledNonTestnetNetworks = (wallet) => {
8
+ if (!wallet ||
9
+ !wallet.connector ||
10
+ typeof wallet.connector.getEnabledNetworks !== 'function') {
11
+ return [];
12
+ }
13
+ const networks = wallet.connector.getEnabledNetworks();
14
+ if (!networks || networks.length === 0) {
15
+ return [];
16
+ }
17
+ return networks.filter((network) => !network.isTestnet);
18
+ };
19
+ /**
20
+ * Formats a Coinbase onramp URL with wallet information
21
+ * @param url Base URL from Coinbase
22
+ * @param wallet User's wallet
23
+ * @returns Formatted URL with wallet information
24
+ */
25
+ const formatCoinbaseOnrampUrl = (url, wallet) => {
26
+ const nonTestnetNetworks = getEnabledNonTestnetNetworks(wallet);
27
+ if (nonTestnetNetworks.length === 0 || !(wallet === null || wallet === void 0 ? void 0 : wallet.address)) {
28
+ return url;
29
+ }
30
+ const baseUrl = new URL(url);
31
+ const appId = baseUrl.searchParams.get('appId');
32
+ // If no appId is present, return the original URL
33
+ if (!appId) {
34
+ return url;
35
+ }
36
+ // Filter out networks with empty or undefined keys and remove duplicates
37
+ const uniqueNetworkKeys = Array.from(new Set(nonTestnetNetworks
38
+ .map((network) => network.key)
39
+ .filter((key) => Boolean(key))));
40
+ if (uniqueNetworkKeys.length === 0) {
41
+ return url;
42
+ }
43
+ // Construct the URL with the raw query parameters
44
+ const finalUrl = `${baseUrl.origin}${baseUrl.pathname}?appId=${appId}&addresses=${encodeURIComponent(JSON.stringify({
45
+ [wallet.address]: uniqueNetworkKeys,
46
+ }))}`;
47
+ return finalUrl;
48
+ };
49
+
50
+ export { formatCoinbaseOnrampUrl, getEnabledNonTestnetNetworks };
@@ -0,0 +1,24 @@
1
+ 'use client'
2
+ 'use strict';
3
+
4
+ Object.defineProperty(exports, '__esModule', { value: true });
5
+
6
+ var coinbase = require('./coinbase.cjs');
7
+
8
+ /**
9
+ * Registry of provider-specific URL formatters
10
+ */
11
+ const providerUrlFormatters = {
12
+ coinbaseOnramp: coinbase.formatCoinbaseOnrampUrl,
13
+ };
14
+ /**
15
+ * Registry of provider display modes (iframe or popup)
16
+ */
17
+ const providerDisplayModes = {
18
+ coinbaseOnramp: 'popup',
19
+ // Default for other providers is iframe
20
+ };
21
+
22
+ exports.formatCoinbaseOnrampUrl = coinbase.formatCoinbaseOnrampUrl;
23
+ exports.providerDisplayModes = providerDisplayModes;
24
+ exports.providerUrlFormatters = providerUrlFormatters;
@@ -0,0 +1,11 @@
1
+ import type { Wallet } from '@dynamic-labs/wallet-connector-core';
2
+ import { formatCoinbaseOnrampUrl } from './coinbase';
3
+ /**
4
+ * Registry of provider-specific URL formatters
5
+ */
6
+ export declare const providerUrlFormatters: Record<string, (url: string, wallet: Wallet) => string>;
7
+ /**
8
+ * Registry of provider display modes (iframe or popup)
9
+ */
10
+ export declare const providerDisplayModes: Record<string, 'iframe' | 'popup'>;
11
+ export { formatCoinbaseOnrampUrl };
@@ -0,0 +1,19 @@
1
+ 'use client'
2
+ import { formatCoinbaseOnrampUrl } from './coinbase.js';
3
+ export { formatCoinbaseOnrampUrl } from './coinbase.js';
4
+
5
+ /**
6
+ * Registry of provider-specific URL formatters
7
+ */
8
+ const providerUrlFormatters = {
9
+ coinbaseOnramp: formatCoinbaseOnrampUrl,
10
+ };
11
+ /**
12
+ * Registry of provider display modes (iframe or popup)
13
+ */
14
+ const providerDisplayModes = {
15
+ coinbaseOnramp: 'popup',
16
+ // Default for other providers is iframe
17
+ };
18
+
19
+ export { providerDisplayModes, providerUrlFormatters };
@@ -4,7 +4,8 @@
4
4
  Object.defineProperty(exports, '__esModule', { value: true });
5
5
 
6
6
  var _tslib = require('../../../../_virtual/_tslib.cjs');
7
- var formatCoinbaseOnrampUrl = require('./coinbaseOnramp/formatCoinbaseOnrampUrl.cjs');
7
+ var sdkApiCore = require('@dynamic-labs/sdk-api-core');
8
+ var index = require('./onrampProviders/index.cjs');
8
9
  var openPopup = require('./openPopup/openPopup.cjs');
9
10
 
10
11
  const ONRAMP_POPUP_CONFIG = {
@@ -12,15 +13,17 @@ const ONRAMP_POPUP_CONFIG = {
12
13
  width: 500,
13
14
  };
14
15
  /**
15
- * Opens an onramp popup for Coinbase and sets up event listeners to handle popup closure
16
+ * Opens an onramp popup and sets up event listeners to handle popup closure
16
17
  * @param url The base URL to open in the popup
17
18
  * @param wallet The user's wallet (optional)
18
19
  * @param setShowOnramp Callback to update the UI state when popup is closed
20
+ * @param provider The onramp provider ID
19
21
  * @returns A promise that resolves when the popup is opened
20
22
  */
21
- const openOnrampPopup = (url, wallet, setShowOnramp) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
22
- // Format the URL with wallet information for Coinbase if wallet is provided
23
- const formattedUrl = wallet ? formatCoinbaseOnrampUrl.formatCoinbaseOnrampUrl(url, wallet) : url;
23
+ const openOnrampPopup = (url_1, wallet_1, setShowOnramp_1, ...args_1) => _tslib.__awaiter(void 0, [url_1, wallet_1, setShowOnramp_1, ...args_1], void 0, function* (url, wallet, setShowOnramp, provider = sdkApiCore.OnrampProviders.CoinbaseOnramp) {
24
+ // Format the URL with wallet information if a formatter exists for this provider
25
+ const formatUrl = index.providerUrlFormatters[provider] || ((url) => url);
26
+ const formattedUrl = wallet ? formatUrl(url, wallet) : url;
24
27
  // Open the popup - errors will propagate to the caller
25
28
  yield openPopup.openPopup(formattedUrl, ONRAMP_POPUP_CONFIG.width, ONRAMP_POPUP_CONFIG.height, () => {
26
29
  // When the popup is closed (by user or programmatically), update the UI
@@ -1,13 +1,15 @@
1
1
  import type { Wallet } from '@dynamic-labs/wallet-connector-core';
2
+ import { OnrampProviders } from '@dynamic-labs/sdk-api-core';
2
3
  export declare const ONRAMP_POPUP_CONFIG: {
3
4
  readonly height: 600;
4
5
  readonly width: 500;
5
6
  };
6
7
  /**
7
- * Opens an onramp popup for Coinbase and sets up event listeners to handle popup closure
8
+ * Opens an onramp popup and sets up event listeners to handle popup closure
8
9
  * @param url The base URL to open in the popup
9
10
  * @param wallet The user's wallet (optional)
10
11
  * @param setShowOnramp Callback to update the UI state when popup is closed
12
+ * @param provider The onramp provider ID
11
13
  * @returns A promise that resolves when the popup is opened
12
14
  */
13
- export declare const openOnrampPopup: (url: string, wallet: Wallet | undefined, setShowOnramp: (show: boolean) => void) => Promise<void>;
15
+ export declare const openOnrampPopup: (url: string, wallet: Wallet | undefined, setShowOnramp: (show: boolean) => void, provider?: OnrampProviders) => Promise<void>;
@@ -1,6 +1,7 @@
1
1
  'use client'
2
2
  import { __awaiter } from '../../../../_virtual/_tslib.js';
3
- import { formatCoinbaseOnrampUrl } from './coinbaseOnramp/formatCoinbaseOnrampUrl.js';
3
+ import { OnrampProviders } from '@dynamic-labs/sdk-api-core';
4
+ import { providerUrlFormatters } from './onrampProviders/index.js';
4
5
  import { openPopup } from './openPopup/openPopup.js';
5
6
 
6
7
  const ONRAMP_POPUP_CONFIG = {
@@ -8,15 +9,17 @@ const ONRAMP_POPUP_CONFIG = {
8
9
  width: 500,
9
10
  };
10
11
  /**
11
- * Opens an onramp popup for Coinbase and sets up event listeners to handle popup closure
12
+ * Opens an onramp popup and sets up event listeners to handle popup closure
12
13
  * @param url The base URL to open in the popup
13
14
  * @param wallet The user's wallet (optional)
14
15
  * @param setShowOnramp Callback to update the UI state when popup is closed
16
+ * @param provider The onramp provider ID
15
17
  * @returns A promise that resolves when the popup is opened
16
18
  */
17
- const openOnrampPopup = (url, wallet, setShowOnramp) => __awaiter(void 0, void 0, void 0, function* () {
18
- // Format the URL with wallet information for Coinbase if wallet is provided
19
- const formattedUrl = wallet ? formatCoinbaseOnrampUrl(url, wallet) : url;
19
+ const openOnrampPopup = (url_1, wallet_1, setShowOnramp_1, ...args_1) => __awaiter(void 0, [url_1, wallet_1, setShowOnramp_1, ...args_1], void 0, function* (url, wallet, setShowOnramp, provider = OnrampProviders.CoinbaseOnramp) {
20
+ // Format the URL with wallet information if a formatter exists for this provider
21
+ const formatUrl = providerUrlFormatters[provider] || ((url) => url);
22
+ const formattedUrl = wallet ? formatUrl(url, wallet) : url;
20
23
  // Open the popup - errors will propagate to the caller
21
24
  yield openPopup(formattedUrl, ONRAMP_POPUP_CONFIG.width, ONRAMP_POPUP_CONFIG.height, () => {
22
25
  // When the popup is closed (by user or programmatically), update the UI
@@ -13,6 +13,8 @@ export type SocialStorageItem = {
13
13
  code?: string;
14
14
  /** Social auth mode, either sign-in or link */
15
15
  mode: SocialAuthMode;
16
+ /** Whether to show the widget after a connection is made */
17
+ showWidgetAfterConnection?: boolean;
16
18
  };
17
19
  export type SocialStorage = Partial<Record<ProviderEnum, SocialStorageItem>>;
18
20
  export declare const searchSocialStorageByState: (targetState: string) => SocialStorageItem | undefined;
@@ -133,8 +133,8 @@ const useDynamicWaas = () => {
133
133
  }
134
134
  if (!walletConnectorOptions.length || !environmentId || !apiBaseUrl)
135
135
  return undefined;
136
- const connectorKey = chainName === 'EVM' ? dynamicWaasKey : `${dynamicWaasKey}-svm`;
137
- const walletConnector = (_a = walletConnectorOptions.find((option) => option.key.includes(connectorKey))) === null || _a === void 0 ? void 0 : _a.walletConnector;
136
+ const walletConnector = (_a = walletConnectorOptions.find((option) => option.key.includes(dynamicWaasKey) &&
137
+ option.walletConnector.connectedChain === chainName)) === null || _a === void 0 ? void 0 : _a.walletConnector;
138
138
  if (!walletConnector) {
139
139
  throw new utils.DynamicError(constants.DYNAMIC_WAAS_CONNECTOR_NOT_FOUND_ERROR);
140
140
  }
@@ -129,8 +129,8 @@ const useDynamicWaas = () => {
129
129
  }
130
130
  if (!walletConnectorOptions.length || !environmentId || !apiBaseUrl)
131
131
  return undefined;
132
- const connectorKey = chainName === 'EVM' ? dynamicWaasKey : `${dynamicWaasKey}-svm`;
133
- const walletConnector = (_a = walletConnectorOptions.find((option) => option.key.includes(connectorKey))) === null || _a === void 0 ? void 0 : _a.walletConnector;
132
+ const walletConnector = (_a = walletConnectorOptions.find((option) => option.key.includes(dynamicWaasKey) &&
133
+ option.walletConnector.connectedChain === chainName)) === null || _a === void 0 ? void 0 : _a.walletConnector;
134
134
  if (!walletConnector) {
135
135
  throw new DynamicError(DYNAMIC_WAAS_CONNECTOR_NOT_FOUND_ERROR);
136
136
  }
@@ -160,6 +160,7 @@ const useEmbeddedWallet = () => {
160
160
  return revealTurnkeyEmbeddedWalletKey(options);
161
161
  });
162
162
  const shouldPromptForKeyExport = React.useCallback(() => { var _a; return Boolean((_a = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.sdk.embeddedWallets) === null || _a === void 0 ? void 0 : _a.promptForKeyExport); }, [projectSettings]);
163
+ const embeddedWalletSettingVersion = React.useCallback(() => { var _a; return (_a = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.sdk.embeddedWallets) === null || _a === void 0 ? void 0 : _a.defaultWalletVersion; }, [projectSettings]);
163
164
  const shouldAutoCreateEmbeddedWallet = React.useCallback((verifiedUser) => {
164
165
  var _a, _b, _c, _d, _e, _f;
165
166
  const hasEmbeddedWalletProviderEnabled = isTurnkeyEnabled.isTurnkeyEnabled(projectSettings);
@@ -197,6 +198,7 @@ const useEmbeddedWallet = () => {
197
198
  createEmbeddedWalletAccount,
198
199
  createOrRestoreSession,
199
200
  createPasskey,
201
+ embeddedWalletSettingVersion,
200
202
  getPasskeys,
201
203
  getWalletVersion,
202
204
  isLoadingEmbeddedWallet,
@@ -1,4 +1,4 @@
1
- import { EmbeddedWalletChainEnum } from '@dynamic-labs/sdk-api-core';
1
+ import { EmbeddedWalletChainEnum, EmbeddedWalletVersionEnum } from '@dynamic-labs/sdk-api-core';
2
2
  import { Wallet } from '../../../shared';
3
3
  import { UserProfile } from '../../../..';
4
4
  /**
@@ -27,6 +27,7 @@ export declare const useEmbeddedWallet: () => {
27
27
  readonly createPasskey: (options: {
28
28
  oneTimeCode: string;
29
29
  } | undefined) => Promise<import("dist/packages/wallet-connector-core/src").WebAuthnAttestation>;
30
+ readonly embeddedWalletSettingVersion: () => EmbeddedWalletVersionEnum | undefined;
30
31
  readonly getPasskeys: () => Promise<import("@dynamic-labs/sdk-api-core").UserPasskey[]>;
31
32
  readonly getWalletVersion: () => import(".").EmbeddedWalletVersion | undefined;
32
33
  readonly isLoadingEmbeddedWallet: boolean;
@@ -156,6 +156,7 @@ const useEmbeddedWallet = () => {
156
156
  return revealTurnkeyEmbeddedWalletKey(options);
157
157
  });
158
158
  const shouldPromptForKeyExport = useCallback(() => { var _a; return Boolean((_a = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.sdk.embeddedWallets) === null || _a === void 0 ? void 0 : _a.promptForKeyExport); }, [projectSettings]);
159
+ const embeddedWalletSettingVersion = useCallback(() => { var _a; return (_a = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.sdk.embeddedWallets) === null || _a === void 0 ? void 0 : _a.defaultWalletVersion; }, [projectSettings]);
159
160
  const shouldAutoCreateEmbeddedWallet = useCallback((verifiedUser) => {
160
161
  var _a, _b, _c, _d, _e, _f;
161
162
  const hasEmbeddedWalletProviderEnabled = isTurnkeyEnabled(projectSettings);
@@ -193,6 +194,7 @@ const useEmbeddedWallet = () => {
193
194
  createEmbeddedWalletAccount,
194
195
  createOrRestoreSession,
195
196
  createPasskey,
197
+ embeddedWalletSettingVersion,
196
198
  getPasskeys,
197
199
  getWalletVersion,
198
200
  isLoadingEmbeddedWallet,
@@ -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();
@@ -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';