@dynamic-labs/legacy-embedded-wallet-migration 5.6.1 → 5.7.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 CHANGED
@@ -1,4 +1,18 @@
1
1
 
2
+ ## [5.7.0](https://github.com/dynamic-labs/dynamic-auth/compare/v5.6.1...v5.7.0) (2026-09-08)
3
+
4
+
5
+ ### Features
6
+
7
+ * **social:** add gemini social provider ([#12292](https://github.com/dynamic-labs/dynamic-auth/issues/12292)) ([fa72cb0](https://github.com/dynamic-labs/dynamic-auth/commit/fa72cb09f678506a5f34188eb7d62415bcb7073b))
8
+
9
+
10
+ ### Bug Fixes
11
+
12
+ * **locale:** add missing dyn_upgrade_wallet.no_legacy_wallets and .close keys ([#12350](https://github.com/dynamic-labs/dynamic-auth/issues/12350)) ([50da3fa](https://github.com/dynamic-labs/dynamic-auth/commit/50da3fa3078de4ecbd88031a3e533a4ff6ced89b))
13
+ * **sdk-react-core:** expose SDK i18next instance for extension packages ([#12351](https://github.com/dynamic-labs/dynamic-auth/issues/12351)) ([f3d95b1](https://github.com/dynamic-labs/dynamic-auth/commit/f3d95b1bb1c30114d32d93dec4e9c2455ab4fdbb))
14
+ * **sdk-react-core:** publish ./icons and ./components subpath exports ([#12334](https://github.com/dynamic-labs/dynamic-auth/issues/12334)) ([519487c](https://github.com/dynamic-labs/dynamic-auth/commit/519487cf5f4f7abe895a125c5bf38800cae04bb5))
15
+
2
16
  ### [5.6.1](https://github.com/dynamic-labs/dynamic-auth/compare/v5.6.0...v5.6.1) (2026-09-01)
3
17
 
4
18
 
package/package.js CHANGED
@@ -1,4 +1,4 @@
1
1
  'use client'
2
- var version = "5.6.1";
2
+ var version = "5.7.0";
3
3
 
4
4
  export { version };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dynamic-labs/legacy-embedded-wallet-migration",
3
- "version": "5.6.1",
3
+ "version": "5.7.0",
4
4
  "license": "MIT",
5
5
  "main": "./src/index.js",
6
6
  "module": "./src/index.js",
@@ -17,15 +17,15 @@
17
17
  },
18
18
  "dependencies": {
19
19
  "@dynamic-labs-sdk/client": "1.31.0",
20
- "@dynamic-labs/assert-package-version": "5.6.1",
21
- "@dynamic-labs/sdk-api-core": "0.12.0",
22
- "@dynamic-labs/utils": "5.6.1",
23
- "@dynamic-labs/wallet-connector-core": "5.6.1"
20
+ "@dynamic-labs/assert-package-version": "5.7.0",
21
+ "@dynamic-labs/sdk-api-core": "0.32.0",
22
+ "@dynamic-labs/utils": "5.7.0",
23
+ "@dynamic-labs/wallet-connector-core": "5.7.0"
24
24
  },
25
25
  "peerDependencies": {
26
- "@dynamic-labs/sdk-react-core": "5.6.1",
26
+ "@dynamic-labs/sdk-react-core": "5.7.0",
27
27
  "react": ">=18.0.0 <20.0.0",
28
28
  "react-i18next": ">=13.0.0",
29
- "@dynamic-labs/types": "5.6.1"
29
+ "@dynamic-labs/types": "5.7.0"
30
30
  }
31
31
  }
@@ -1,6 +1,7 @@
1
1
  'use client'
2
2
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
3
3
  import { useTranslation } from 'react-i18next';
4
+ import { useDynamicContext } from '@dynamic-labs/sdk-react-core';
4
5
  import { IconButton, ModalHeader, Typography, TypographyButton } from '@dynamic-labs/sdk-react-core/components';
5
6
  import { CloseIcon, SparklesIcon } from '@dynamic-labs/sdk-react-core/icons';
6
7
 
@@ -36,7 +37,8 @@ const messageStyle = {
36
37
  };
37
38
  const actionsStyle = { maxWidth: 340, width: '100%' };
38
39
  const AccountUpgradedView = ({ onFinish, }) => {
39
- const { t } = useTranslation();
40
+ const { i18nSDKInstance } = useDynamicContext();
41
+ const { t } = useTranslation('translation', { i18n: i18nSDKInstance });
40
42
  const closeButton = (jsx(IconButton, { onClick: onFinish, type: 'button', children: jsx(CloseIcon, {}) }));
41
43
  return (jsxs(Fragment, { children: [jsx(ModalHeader, { trailing: closeButton, displayBorder: true, children: jsx(Typography, { variant: 'title', color: 'primary', children: t('dyn_account_upgraded.title') }) }), jsxs("div", { style: containerStyle, children: [jsxs("div", { style: contentStyle, children: [jsx("div", { style: iconBackgroundStyle, children: jsx(SparklesIcon, { style: iconStyle }) }), jsx("div", { style: messageStyle, children: jsx(Typography, { variant: 'body_normal', color: 'primary', style: { textAlign: 'center' }, children: t('dyn_account_upgraded.message') }) })] }), jsx("div", { style: actionsStyle, children: jsx(TypographyButton, { onClick: onFinish, buttonVariant: 'brand-primary', expanded: true, buttonPadding: 'large', typographyProps: { color: 'white' }, dataTestId: 'account-upgraded-continue-button', children: t('dyn_account_upgraded.continue_button') }) })] })] }));
42
44
  };
@@ -1,6 +1,7 @@
1
1
  'use client'
2
2
  import { jsxs, jsx } from 'react/jsx-runtime';
3
3
  import { useTranslation } from 'react-i18next';
4
+ import { useDynamicContext } from '@dynamic-labs/sdk-react-core';
4
5
  import { ModalHeader, Typography, TypographyButton } from '@dynamic-labs/sdk-react-core/components';
5
6
  import { UpgradeIcon } from '@dynamic-labs/sdk-react-core/icons';
6
7
 
@@ -54,7 +55,8 @@ const actionsStyle = {
54
55
  };
55
56
  const shortenAddress = (address) => `${address.slice(0, 6)}...${address.slice(-4)}`;
56
57
  const WaasUpgradeView = ({ wallets, onContinue, onCancel, isLoading = false, }) => {
57
- const { t } = useTranslation();
58
+ const { i18nSDKInstance } = useDynamicContext();
59
+ const { t } = useTranslation('translation', { i18n: i18nSDKInstance });
58
60
  const hasWallets = wallets.length > 0;
59
61
  return (jsxs("div", { style: containerStyle, children: [jsx(ModalHeader, { children: jsx(Typography, { as: 'h1', variant: 'title', color: 'primary', children: t('dyn_upgrade_wallet.title') }) }), jsxs("div", { style: contentStyle, children: [jsx("div", { style: illustrationStyle, children: jsx(UpgradeIcon, {}) }), jsx(Typography, { as: 'p', variant: 'body_normal', color: 'primary', style: descriptionStyle, children: t('dyn_upgrade_wallet.description') }), hasWallets ? (jsxs("div", { style: walletsSectionStyle, children: [jsx(Typography, { color: 'primary', children: t('dyn_upgrade_wallet.eligible_wallets') }), jsx("div", { style: walletsListStyle, "data-testid": 'waas-upgrade-view-wallets-list', children: wallets.map((wallet) => (jsxs("div", { style: walletItemStyle, "data-testid": 'waas-upgrade-view-wallet-item', children: [jsx(Typography, { color: 'primary', children: wallet.chain }), jsx(Typography, { color: 'primary', children: shortenAddress(wallet.address) })] }, wallet.id))) })] })) : (jsx(Typography, { color: 'secondary', style: descriptionStyle, copykey: 'dyn_upgrade_wallet.no_legacy_wallets', "data-testid": 'waas-upgrade-view-no-legacy-wallets', children: t('dyn_upgrade_wallet.no_legacy_wallets') })), jsx("div", { style: actionsStyle, children: hasWallets ? (jsx(TypographyButton, { buttonVariant: 'brand-primary', onClick: onContinue, disabled: isLoading, loading: isLoading, copykey: 'dyn_upgrade_wallet.upgrade', typographyProps: { color: 'inherit' }, dataTestId: 'waas-upgrade-view-continue-button', children: t('dyn_upgrade_wallet.upgrade') })) : (jsx(TypographyButton, { buttonVariant: 'tertiary', onClick: onCancel, dataTestId: 'waas-upgrade-view-close-button', children: t('dyn_upgrade_wallet.close') })) })] })] }));
60
62
  };
@@ -3,6 +3,7 @@ import { __awaiter } from '../../../../_virtual/_tslib.js';
3
3
  import { jsxs, jsx } from 'react/jsx-runtime';
4
4
  import { useState } from 'react';
5
5
  import { useTranslation } from 'react-i18next';
6
+ import { useDynamicContext } from '@dynamic-labs/sdk-react-core';
6
7
  import { ModalHeader, Typography, ErrorContainer, Textarea, TypographyButton } from '@dynamic-labs/sdk-react-core/components';
7
8
  import { LegacyEmbeddedWalletExport } from '../LegacyEmbeddedWalletExport/LegacyEmbeddedWalletExport.js';
8
9
 
@@ -70,7 +71,8 @@ const getStepIndicatorStyle = (current, completed) => {
70
71
  return Object.assign(Object.assign({}, baseStepIndicatorStyle), { background: 'transparent', borderColor: 'var(--dynamic-border-color)', color: 'var(--dynamic-text-secondary)' });
71
72
  };
72
73
  const WalletUpgradeFlowView = ({ wallets, onUpgrade, onFinish, }) => {
73
- const { t } = useTranslation();
74
+ const { i18nSDKInstance } = useDynamicContext();
75
+ const { t } = useTranslation('translation', { i18n: i18nSDKInstance });
74
76
  const [currentIndex, setCurrentIndex] = useState(0);
75
77
  const [privateKeyInput, setPrivateKeyInput] = useState('');
76
78
  const [isUpgrading, setIsUpgrading] = useState(false);
@@ -1,6 +1,7 @@
1
1
  'use client'
2
2
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
3
3
  import { useTranslation } from 'react-i18next';
4
+ import { useDynamicContext } from '@dynamic-labs/sdk-react-core';
4
5
  import { IconButton, ModalHeader, Typography, EmailForm } from '@dynamic-labs/sdk-react-core/components';
5
6
  import { CloseIcon } from '@dynamic-labs/sdk-react-core/icons';
6
7
 
@@ -13,7 +14,8 @@ const containerStyle = {
13
14
  };
14
15
  const descriptionStyle = { maxWidth: 360 };
15
16
  const LegacyAddRecoveryEmailView = ({ onSubmit, onCancel, defaultEmail, isSubmitting, errorMessage }) => {
16
- const { t } = useTranslation();
17
+ const { i18nSDKInstance } = useDynamicContext();
18
+ const { t } = useTranslation('translation', { i18n: i18nSDKInstance });
17
19
  const closeButton = (jsx(IconButton, { onClick: onCancel, type: 'button', children: jsx(CloseIcon, {}) }));
18
20
  return (jsxs(Fragment, { children: [jsx(ModalHeader, { trailing: closeButton, children: jsx(Typography, { variant: 'title', color: 'primary', children: t('dyn_passkey_recovery.add_email.title') }) }), jsxs("div", { style: containerStyle, children: [jsx(Typography, { variant: 'body_normal', color: 'secondary', style: descriptionStyle, children: t('dyn_passkey_recovery.add_email.description') }), errorMessage && (jsx(Typography, { variant: 'body_small', color: 'error-1', children: errorMessage })), jsx(EmailForm, { onSubmit: onSubmit, isLoading: Boolean(isSubmitting), currentEmail: defaultEmail, buttonCopyKey: EMAIL_SUBMIT_COPY_KEY })] })] }));
19
21
  };
@@ -1,6 +1,7 @@
1
1
  'use client'
2
2
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
3
3
  import { useTranslation } from 'react-i18next';
4
+ import { useDynamicContext } from '@dynamic-labs/sdk-react-core';
4
5
  import { IconButton, ModalHeader, Typography, TypographyButton } from '@dynamic-labs/sdk-react-core/components';
5
6
  import { CloseIcon } from '@dynamic-labs/sdk-react-core/icons';
6
7
 
@@ -19,7 +20,8 @@ const buttonGroupStyle = {
19
20
  // usePasskeyRecovery hook integration. For now this view renders one button
20
21
  // per supported authenticator so the step machine can be exercised.
21
22
  const LegacyEmbeddedAuthChoiceView = ({ supportedAuthenticators, onSelect, onCancel, isSubmitting }) => {
22
- const { t } = useTranslation();
23
+ const { i18nSDKInstance } = useDynamicContext();
24
+ const { t } = useTranslation('translation', { i18n: i18nSDKInstance });
23
25
  const closeButton = (jsx(IconButton, { onClick: onCancel, type: 'button', children: jsx(CloseIcon, {}) }));
24
26
  return (jsxs(Fragment, { children: [jsx(ModalHeader, { trailing: closeButton, children: jsx(Typography, { variant: 'title', color: 'primary', children: t('dyn_embedded_authenticator.title') }) }), jsxs("div", { style: containerStyle, children: [jsx(Typography, { variant: 'body_normal', color: 'secondary', children: t('dyn_embedded_authenticator.description') }), jsx("div", { style: buttonGroupStyle, children: supportedAuthenticators.map((authenticatorType) => (jsx(TypographyButton, { dataTestId: `legacy-auth-choice-${authenticatorType}`, onClick: () => onSelect(authenticatorType), buttonVariant: 'brand-primary', expanded: true, disabled: isSubmitting, typographyProps: { color: 'white' }, children: authenticatorType === 'passkey'
25
27
  ? t('dyn_embedded_authenticator.passkey.title')
@@ -2,6 +2,7 @@
2
2
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
3
3
  import { useState } from 'react';
4
4
  import { useTranslation } from 'react-i18next';
5
+ import { useDynamicContext } from '@dynamic-labs/sdk-react-core';
5
6
  import { IconButton, ModalHeader, Typography, Input, TypographyButton } from '@dynamic-labs/sdk-react-core/components';
6
7
  import { CloseIcon } from '@dynamic-labs/sdk-react-core/icons';
7
8
 
@@ -19,7 +20,8 @@ const isValidBundle = (bundle) => bundle.length >= BUNDLE_MIN_LENGTH &&
19
20
  bundle.length < BUNDLE_MAX_LENGTH &&
20
21
  bundleRegex.test(bundle);
21
22
  const LegacyPasskeyBundleRecoveryView = ({ email, onSubmit, onResend, onCancel, isSubmitting, errorMessage }) => {
22
- const { t } = useTranslation();
23
+ const { i18nSDKInstance } = useDynamicContext();
24
+ const { t } = useTranslation('translation', { i18n: i18nSDKInstance });
23
25
  const [bundleInput, setBundleInput] = useState('');
24
26
  const closeButton = (jsx(IconButton, { onClick: onCancel, type: 'button', children: jsx(CloseIcon, {}) }));
25
27
  const handleBundleChange = (event) => {
@@ -1,6 +1,7 @@
1
1
  'use client'
2
2
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
3
3
  import { useTranslation } from 'react-i18next';
4
+ import { useDynamicContext } from '@dynamic-labs/sdk-react-core';
4
5
  import { IconButton, ModalHeader, Typography, TypographyButton } from '@dynamic-labs/sdk-react-core/components';
5
6
  import { CloseIcon } from '@dynamic-labs/sdk-react-core/icons';
6
7
 
@@ -14,7 +15,8 @@ const containerStyle = {
14
15
  // usePasskeyRecovery hook integration. For now this view exposes the modal
15
16
  // header + submit hook so the step machine can be exercised.
16
17
  const LegacyPasskeyCompleteRecoveryView = ({ onSubmit, onCancel, isSubmitting, errorMessage }) => {
17
- const { t } = useTranslation();
18
+ const { i18nSDKInstance } = useDynamicContext();
19
+ const { t } = useTranslation('translation', { i18n: i18nSDKInstance });
18
20
  const closeButton = (jsx(IconButton, { onClick: onCancel, type: 'button', children: jsx(CloseIcon, {}) }));
19
21
  return (jsxs(Fragment, { children: [jsx(ModalHeader, { trailing: closeButton, children: jsx(Typography, { variant: 'title', color: 'primary', children: t('dyn_passkey_recovery.complete.title') }) }), jsxs("div", { style: containerStyle, children: [jsx(Typography, { variant: 'body_normal', color: 'secondary', children: t('dyn_passkey_recovery.complete.description') }), errorMessage && (jsx(Typography, { variant: 'body_small', color: 'error-1', children: errorMessage })), jsx(TypographyButton, { dataTestId: 'legacy-passkey-complete-submit', onClick: () => onSubmit(), buttonVariant: 'brand-primary', expanded: true, disabled: isSubmitting, typographyProps: { color: 'white' }, children: t('dyn_passkey_recovery.complete.complete_button') })] })] }));
20
22
  };