@dynamic-labs/sdk-react-core 4.60.0 → 4.61.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 +30 -0
- package/package.cjs +4 -4
- package/package.js +4 -4
- package/package.json +15 -15
- package/src/index.cjs +4 -4
- package/src/index.d.ts +1 -1
- package/src/index.js +2 -2
- package/src/lib/layout/DynamicAuthLayout/Header/header.cjs +2 -1
- package/src/lib/layout/DynamicAuthLayout/Header/header.js +2 -1
- package/src/lib/shared/assets/error-circle-x.cjs +54 -0
- package/src/lib/shared/assets/error-circle-x.js +30 -0
- package/src/lib/shared/assets/index.d.ts +1 -0
- package/src/lib/shared/types/dynamicHandlers.d.ts +64 -0
- package/src/lib/shared/utils/functions/chain/getChainIcon.cjs +1 -0
- package/src/lib/shared/utils/functions/chain/getChainIcon.js +2 -1
- package/src/lib/styles/index.shadow.cjs +1 -1
- package/src/lib/styles/index.shadow.js +1 -1
- package/src/lib/utils/hooks/index.d.ts +3 -1
- package/src/lib/utils/hooks/useDynamicWaas/useDynamicWaas.cjs +18 -16
- package/src/lib/utils/hooks/useDynamicWaas/useDynamicWaas.d.ts +4 -8
- package/src/lib/utils/hooks/useDynamicWaas/useDynamicWaas.js +18 -16
- package/src/lib/utils/hooks/useGetWalletPassword/index.d.ts +2 -0
- package/src/lib/utils/hooks/useGetWalletPassword/useGetWalletPassword.cjs +130 -0
- package/src/lib/utils/hooks/useGetWalletPassword/useGetWalletPassword.d.ts +6 -0
- package/src/lib/utils/hooks/useGetWalletPassword/useGetWalletPassword.js +126 -0
- package/src/lib/utils/hooks/useSetWalletConnectorFetchers/useSetWalletConnectorFetchers.cjs +7 -2
- package/src/lib/utils/hooks/useSetWalletConnectorFetchers/useSetWalletConnectorFetchers.js +7 -2
- package/src/lib/utils/hooks/useSetupPassword/useSetupPassword.cjs +87 -0
- package/src/lib/utils/hooks/useSetupPassword/useSetupPassword.d.ts +3 -0
- package/src/lib/utils/hooks/useSetupPassword/useSetupPassword.js +88 -1
- package/src/lib/utils/hooks/useSmartWallets/useSmartWallets.cjs +1 -1
- package/src/lib/utils/hooks/useSmartWallets/useSmartWallets.js +1 -1
- package/src/lib/utils/hooks/useSyncDynamicWaas/useSyncDynamicWaas.cjs +1 -1
- package/src/lib/utils/hooks/useSyncDynamicWaas/useSyncDynamicWaas.js +1 -1
- package/src/lib/utils/hooks/useUserAuth/useUserAuth.cjs +12 -4
- package/src/lib/utils/hooks/useUserAuth/useUserAuth.js +12 -4
- package/src/lib/utils/hooks/useWalletBackup/useWalletBackup.cjs +1 -1
- package/src/lib/utils/hooks/useWalletBackup/useWalletBackup.js +1 -1
- package/src/lib/utils/hooks/useWalletDelegation/useWalletDelegation.cjs +1 -1
- package/src/lib/utils/hooks/useWalletDelegation/useWalletDelegation.js +1 -1
- package/src/lib/utils/hooks/useWalletPassword/index.d.ts +1 -0
- package/src/lib/utils/hooks/useWalletPassword/useWalletPassword.cjs +152 -0
- package/src/lib/utils/hooks/useWalletPassword/useWalletPassword.d.ts +30 -0
- package/src/lib/utils/hooks/useWalletPassword/useWalletPassword.js +148 -0
- package/src/lib/views/UnlockWalletView/UnlockWalletView.cjs +32 -1
- package/src/lib/views/UnlockWalletView/UnlockWalletView.js +32 -1
- package/src/lib/widgets/DynamicWidget/components/DynamicWidgetViews/mapViewToComponent.cjs +2 -2
- package/src/lib/widgets/DynamicWidget/components/DynamicWidgetViews/mapViewToComponent.js +2 -2
- package/src/lib/widgets/DynamicWidget/views/AccountAndSecuritySettingsView/MfaSection/MfaSection.cjs +11 -14
- package/src/lib/widgets/DynamicWidget/views/AccountAndSecuritySettingsView/MfaSection/MfaSection.js +11 -14
- package/src/lib/widgets/DynamicWidget/views/EnterPasswordView/EnterPasswordView.cjs +15 -5
- package/src/lib/widgets/DynamicWidget/views/EnterPasswordView/EnterPasswordView.js +15 -5
- package/src/lib/widgets/DynamicWidget/views/SetupPasswordKnowledgeCheckView/SetupPasswordKnowledgeCheckView.cjs +7 -15
- package/src/lib/widgets/DynamicWidget/views/SetupPasswordKnowledgeCheckView/SetupPasswordKnowledgeCheckView.d.ts +0 -1
- package/src/lib/widgets/DynamicWidget/views/SetupPasswordKnowledgeCheckView/SetupPasswordKnowledgeCheckView.js +7 -15
- package/src/lib/widgets/DynamicWidget/views/SetupPasswordTermsView/SetupPasswordTermsView.cjs +9 -2
- package/src/lib/widgets/DynamicWidget/views/SetupPasswordTermsView/SetupPasswordTermsView.d.ts +1 -1
- package/src/lib/widgets/DynamicWidget/views/SetupPasswordTermsView/SetupPasswordTermsView.js +9 -2
- package/src/lib/widgets/DynamicWidget/views/SetupPasswordView/SetupPasswordView.cjs +13 -8
- package/src/lib/widgets/DynamicWidget/views/SetupPasswordView/SetupPasswordView.js +13 -8
- package/src/lib/utils/hooks/useGetPasswordForSigning/index.d.ts +0 -2
- package/src/lib/utils/hooks/useGetPasswordForSigning/useGetPasswordForSigning.cjs +0 -16
- package/src/lib/utils/hooks/useGetPasswordForSigning/useGetPasswordForSigning.d.ts +0 -5
- package/src/lib/utils/hooks/useGetPasswordForSigning/useGetPasswordForSigning.js +0 -12
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
5
|
+
|
|
6
|
+
var _tslib = require('../../../../../_virtual/_tslib.cjs');
|
|
7
|
+
var React = require('react');
|
|
8
|
+
var dynamicEvents = require('../../../events/dynamicEvents.cjs');
|
|
9
|
+
require('@dynamic-labs/iconic');
|
|
10
|
+
require('@dynamic-labs/wallet-connector-core');
|
|
11
|
+
require('react/jsx-runtime');
|
|
12
|
+
require('../../../context/ViewContext/ViewContext.cjs');
|
|
13
|
+
var logger = require('../../../shared/logger.cjs');
|
|
14
|
+
require('@dynamic-labs/wallet-book');
|
|
15
|
+
require('@dynamic-labs/utils');
|
|
16
|
+
require('../../constants/colors.cjs');
|
|
17
|
+
require('../../constants/values.cjs');
|
|
18
|
+
require('@dynamic-labs/sdk-api-core');
|
|
19
|
+
require('../../../shared/consts/index.cjs');
|
|
20
|
+
var useDynamicWaas = require('../useDynamicWaas/useDynamicWaas.cjs');
|
|
21
|
+
|
|
22
|
+
const INITIAL_STATE = {
|
|
23
|
+
error: null,
|
|
24
|
+
isLoading: false,
|
|
25
|
+
recoveryState: null,
|
|
26
|
+
};
|
|
27
|
+
const useWalletPassword = () => {
|
|
28
|
+
const { getWaasWalletConnector } = useDynamicWaas.useDynamicWaas();
|
|
29
|
+
const [state, setState] = React.useState(INITIAL_STATE);
|
|
30
|
+
const resetState = React.useCallback(() => {
|
|
31
|
+
setState(INITIAL_STATE);
|
|
32
|
+
}, []);
|
|
33
|
+
const updatePassword = React.useCallback((params) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
|
|
34
|
+
const { accountAddress, chainName, newPassword, existingPassword } = params;
|
|
35
|
+
setState((prev) => (Object.assign(Object.assign({}, prev), { error: null, isLoading: true })));
|
|
36
|
+
try {
|
|
37
|
+
const connector = getWaasWalletConnector(chainName);
|
|
38
|
+
if (!connector) {
|
|
39
|
+
const errorMessage = 'Wallet connector not found';
|
|
40
|
+
setState((prev) => (Object.assign(Object.assign({}, prev), { error: errorMessage, isLoading: false })));
|
|
41
|
+
logger.logger.error(errorMessage, { accountAddress, chainName });
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
yield connector.updatePassword({
|
|
45
|
+
accountAddress,
|
|
46
|
+
existingPassword,
|
|
47
|
+
newPassword,
|
|
48
|
+
});
|
|
49
|
+
setState((prev) => (Object.assign(Object.assign({}, prev), { error: null, isLoading: false })));
|
|
50
|
+
return true;
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
const errorMessage = error instanceof Error ? error.message : 'Failed to update password';
|
|
54
|
+
setState((prev) => (Object.assign(Object.assign({}, prev), { error: errorMessage, isLoading: false })));
|
|
55
|
+
logger.logger.error('Failed to update wallet password', {
|
|
56
|
+
accountAddress,
|
|
57
|
+
chainName,
|
|
58
|
+
error,
|
|
59
|
+
});
|
|
60
|
+
return false;
|
|
61
|
+
}
|
|
62
|
+
}), [getWaasWalletConnector]);
|
|
63
|
+
const unlockWallet = React.useCallback((params) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
|
|
64
|
+
const { accountAddress, chainName, password } = params;
|
|
65
|
+
setState((prev) => (Object.assign(Object.assign({}, prev), { error: null, isLoading: true })));
|
|
66
|
+
try {
|
|
67
|
+
const connector = getWaasWalletConnector(chainName);
|
|
68
|
+
if (!connector) {
|
|
69
|
+
const errorMessage = 'Wallet connector not found';
|
|
70
|
+
setState((prev) => (Object.assign(Object.assign({}, prev), { error: errorMessage, isLoading: false })));
|
|
71
|
+
logger.logger.error(errorMessage, { accountAddress, chainName });
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
dynamicEvents.dynamicEvents.emit('walletUnlockAttempt', {
|
|
75
|
+
accountAddress,
|
|
76
|
+
chainName,
|
|
77
|
+
});
|
|
78
|
+
yield connector.unlockWallet({
|
|
79
|
+
accountAddress,
|
|
80
|
+
password,
|
|
81
|
+
});
|
|
82
|
+
setState((prev) => (Object.assign(Object.assign({}, prev), { error: null, isLoading: false })));
|
|
83
|
+
dynamicEvents.dynamicEvents.emit('walletUnlockCompleted', {
|
|
84
|
+
accountAddress,
|
|
85
|
+
chainName,
|
|
86
|
+
});
|
|
87
|
+
return true;
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
const errorMessage = error instanceof Error ? error.message : 'Failed to unlock wallet';
|
|
91
|
+
setState((prev) => (Object.assign(Object.assign({}, prev), { error: errorMessage, isLoading: false })));
|
|
92
|
+
logger.logger.error('Failed to unlock wallet', {
|
|
93
|
+
accountAddress,
|
|
94
|
+
chainName,
|
|
95
|
+
error,
|
|
96
|
+
});
|
|
97
|
+
dynamicEvents.dynamicEvents.emit('walletUnlockFailed', {
|
|
98
|
+
accountAddress,
|
|
99
|
+
chainName,
|
|
100
|
+
error,
|
|
101
|
+
});
|
|
102
|
+
return false;
|
|
103
|
+
}
|
|
104
|
+
}), [getWaasWalletConnector]);
|
|
105
|
+
const checkWalletLockState = React.useCallback((params) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
|
|
106
|
+
const { accountAddress, chainName } = params;
|
|
107
|
+
setState((prev) => (Object.assign(Object.assign({}, prev), { error: null, isLoading: true })));
|
|
108
|
+
try {
|
|
109
|
+
const connector = getWaasWalletConnector(chainName);
|
|
110
|
+
if (!connector) {
|
|
111
|
+
const errorMessage = 'Wallet connector not found';
|
|
112
|
+
setState((prev) => (Object.assign(Object.assign({}, prev), { error: errorMessage, isLoading: false })));
|
|
113
|
+
logger.logger.error(errorMessage, { accountAddress, chainName });
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
const recoveryState = yield connector.getWalletRecoveryState({
|
|
117
|
+
accountAddress,
|
|
118
|
+
});
|
|
119
|
+
setState({
|
|
120
|
+
error: null,
|
|
121
|
+
isLoading: false,
|
|
122
|
+
recoveryState,
|
|
123
|
+
});
|
|
124
|
+
return recoveryState;
|
|
125
|
+
}
|
|
126
|
+
catch (error) {
|
|
127
|
+
const errorMessage = error instanceof Error
|
|
128
|
+
? error.message
|
|
129
|
+
: 'Failed to check wallet state';
|
|
130
|
+
setState({
|
|
131
|
+
error: errorMessage,
|
|
132
|
+
isLoading: false,
|
|
133
|
+
recoveryState: null,
|
|
134
|
+
});
|
|
135
|
+
logger.logger.error('Failed to check wallet lock state', {
|
|
136
|
+
accountAddress,
|
|
137
|
+
chainName,
|
|
138
|
+
error,
|
|
139
|
+
});
|
|
140
|
+
return null;
|
|
141
|
+
}
|
|
142
|
+
}), [getWaasWalletConnector]);
|
|
143
|
+
return {
|
|
144
|
+
checkWalletLockState,
|
|
145
|
+
resetState,
|
|
146
|
+
state,
|
|
147
|
+
unlockWallet,
|
|
148
|
+
updatePassword,
|
|
149
|
+
};
|
|
150
|
+
};
|
|
151
|
+
|
|
152
|
+
exports.useWalletPassword = useWalletPassword;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { WalletRecoveryState } from '@dynamic-labs-wallet/browser-wallet-client';
|
|
2
|
+
import { ChainEnum } from '@dynamic-labs/sdk-api-core';
|
|
3
|
+
export type UpdatePasswordParams = {
|
|
4
|
+
accountAddress: string;
|
|
5
|
+
chainName: ChainEnum;
|
|
6
|
+
newPassword: string;
|
|
7
|
+
existingPassword?: string;
|
|
8
|
+
};
|
|
9
|
+
export type UnlockWalletParams = {
|
|
10
|
+
accountAddress: string;
|
|
11
|
+
chainName: ChainEnum;
|
|
12
|
+
password: string;
|
|
13
|
+
};
|
|
14
|
+
export type CheckWalletLockStateParams = {
|
|
15
|
+
accountAddress: string;
|
|
16
|
+
chainName: ChainEnum;
|
|
17
|
+
};
|
|
18
|
+
export type WalletPasswordState = {
|
|
19
|
+
isLoading: boolean;
|
|
20
|
+
error: string | null;
|
|
21
|
+
recoveryState: WalletRecoveryState | null;
|
|
22
|
+
};
|
|
23
|
+
export type UseWalletPasswordReturn = {
|
|
24
|
+
updatePassword: (params: UpdatePasswordParams) => Promise<boolean>;
|
|
25
|
+
unlockWallet: (params: UnlockWalletParams) => Promise<boolean>;
|
|
26
|
+
checkWalletLockState: (params: CheckWalletLockStateParams) => Promise<WalletRecoveryState | null>;
|
|
27
|
+
state: WalletPasswordState;
|
|
28
|
+
resetState: () => void;
|
|
29
|
+
};
|
|
30
|
+
export declare const useWalletPassword: () => UseWalletPasswordReturn;
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
import { __awaiter } from '../../../../../_virtual/_tslib.js';
|
|
3
|
+
import { useState, useCallback } from 'react';
|
|
4
|
+
import { dynamicEvents } from '../../../events/dynamicEvents.js';
|
|
5
|
+
import '@dynamic-labs/iconic';
|
|
6
|
+
import '@dynamic-labs/wallet-connector-core';
|
|
7
|
+
import 'react/jsx-runtime';
|
|
8
|
+
import '../../../context/ViewContext/ViewContext.js';
|
|
9
|
+
import { logger } from '../../../shared/logger.js';
|
|
10
|
+
import '@dynamic-labs/wallet-book';
|
|
11
|
+
import '@dynamic-labs/utils';
|
|
12
|
+
import '../../constants/colors.js';
|
|
13
|
+
import '../../constants/values.js';
|
|
14
|
+
import '@dynamic-labs/sdk-api-core';
|
|
15
|
+
import '../../../shared/consts/index.js';
|
|
16
|
+
import { useDynamicWaas } from '../useDynamicWaas/useDynamicWaas.js';
|
|
17
|
+
|
|
18
|
+
const INITIAL_STATE = {
|
|
19
|
+
error: null,
|
|
20
|
+
isLoading: false,
|
|
21
|
+
recoveryState: null,
|
|
22
|
+
};
|
|
23
|
+
const useWalletPassword = () => {
|
|
24
|
+
const { getWaasWalletConnector } = useDynamicWaas();
|
|
25
|
+
const [state, setState] = useState(INITIAL_STATE);
|
|
26
|
+
const resetState = useCallback(() => {
|
|
27
|
+
setState(INITIAL_STATE);
|
|
28
|
+
}, []);
|
|
29
|
+
const updatePassword = useCallback((params) => __awaiter(void 0, void 0, void 0, function* () {
|
|
30
|
+
const { accountAddress, chainName, newPassword, existingPassword } = params;
|
|
31
|
+
setState((prev) => (Object.assign(Object.assign({}, prev), { error: null, isLoading: true })));
|
|
32
|
+
try {
|
|
33
|
+
const connector = getWaasWalletConnector(chainName);
|
|
34
|
+
if (!connector) {
|
|
35
|
+
const errorMessage = 'Wallet connector not found';
|
|
36
|
+
setState((prev) => (Object.assign(Object.assign({}, prev), { error: errorMessage, isLoading: false })));
|
|
37
|
+
logger.error(errorMessage, { accountAddress, chainName });
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
yield connector.updatePassword({
|
|
41
|
+
accountAddress,
|
|
42
|
+
existingPassword,
|
|
43
|
+
newPassword,
|
|
44
|
+
});
|
|
45
|
+
setState((prev) => (Object.assign(Object.assign({}, prev), { error: null, isLoading: false })));
|
|
46
|
+
return true;
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
const errorMessage = error instanceof Error ? error.message : 'Failed to update password';
|
|
50
|
+
setState((prev) => (Object.assign(Object.assign({}, prev), { error: errorMessage, isLoading: false })));
|
|
51
|
+
logger.error('Failed to update wallet password', {
|
|
52
|
+
accountAddress,
|
|
53
|
+
chainName,
|
|
54
|
+
error,
|
|
55
|
+
});
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
58
|
+
}), [getWaasWalletConnector]);
|
|
59
|
+
const unlockWallet = useCallback((params) => __awaiter(void 0, void 0, void 0, function* () {
|
|
60
|
+
const { accountAddress, chainName, password } = params;
|
|
61
|
+
setState((prev) => (Object.assign(Object.assign({}, prev), { error: null, isLoading: true })));
|
|
62
|
+
try {
|
|
63
|
+
const connector = getWaasWalletConnector(chainName);
|
|
64
|
+
if (!connector) {
|
|
65
|
+
const errorMessage = 'Wallet connector not found';
|
|
66
|
+
setState((prev) => (Object.assign(Object.assign({}, prev), { error: errorMessage, isLoading: false })));
|
|
67
|
+
logger.error(errorMessage, { accountAddress, chainName });
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
|
+
dynamicEvents.emit('walletUnlockAttempt', {
|
|
71
|
+
accountAddress,
|
|
72
|
+
chainName,
|
|
73
|
+
});
|
|
74
|
+
yield connector.unlockWallet({
|
|
75
|
+
accountAddress,
|
|
76
|
+
password,
|
|
77
|
+
});
|
|
78
|
+
setState((prev) => (Object.assign(Object.assign({}, prev), { error: null, isLoading: false })));
|
|
79
|
+
dynamicEvents.emit('walletUnlockCompleted', {
|
|
80
|
+
accountAddress,
|
|
81
|
+
chainName,
|
|
82
|
+
});
|
|
83
|
+
return true;
|
|
84
|
+
}
|
|
85
|
+
catch (error) {
|
|
86
|
+
const errorMessage = error instanceof Error ? error.message : 'Failed to unlock wallet';
|
|
87
|
+
setState((prev) => (Object.assign(Object.assign({}, prev), { error: errorMessage, isLoading: false })));
|
|
88
|
+
logger.error('Failed to unlock wallet', {
|
|
89
|
+
accountAddress,
|
|
90
|
+
chainName,
|
|
91
|
+
error,
|
|
92
|
+
});
|
|
93
|
+
dynamicEvents.emit('walletUnlockFailed', {
|
|
94
|
+
accountAddress,
|
|
95
|
+
chainName,
|
|
96
|
+
error,
|
|
97
|
+
});
|
|
98
|
+
return false;
|
|
99
|
+
}
|
|
100
|
+
}), [getWaasWalletConnector]);
|
|
101
|
+
const checkWalletLockState = useCallback((params) => __awaiter(void 0, void 0, void 0, function* () {
|
|
102
|
+
const { accountAddress, chainName } = params;
|
|
103
|
+
setState((prev) => (Object.assign(Object.assign({}, prev), { error: null, isLoading: true })));
|
|
104
|
+
try {
|
|
105
|
+
const connector = getWaasWalletConnector(chainName);
|
|
106
|
+
if (!connector) {
|
|
107
|
+
const errorMessage = 'Wallet connector not found';
|
|
108
|
+
setState((prev) => (Object.assign(Object.assign({}, prev), { error: errorMessage, isLoading: false })));
|
|
109
|
+
logger.error(errorMessage, { accountAddress, chainName });
|
|
110
|
+
return null;
|
|
111
|
+
}
|
|
112
|
+
const recoveryState = yield connector.getWalletRecoveryState({
|
|
113
|
+
accountAddress,
|
|
114
|
+
});
|
|
115
|
+
setState({
|
|
116
|
+
error: null,
|
|
117
|
+
isLoading: false,
|
|
118
|
+
recoveryState,
|
|
119
|
+
});
|
|
120
|
+
return recoveryState;
|
|
121
|
+
}
|
|
122
|
+
catch (error) {
|
|
123
|
+
const errorMessage = error instanceof Error
|
|
124
|
+
? error.message
|
|
125
|
+
: 'Failed to check wallet state';
|
|
126
|
+
setState({
|
|
127
|
+
error: errorMessage,
|
|
128
|
+
isLoading: false,
|
|
129
|
+
recoveryState: null,
|
|
130
|
+
});
|
|
131
|
+
logger.error('Failed to check wallet lock state', {
|
|
132
|
+
accountAddress,
|
|
133
|
+
chainName,
|
|
134
|
+
error,
|
|
135
|
+
});
|
|
136
|
+
return null;
|
|
137
|
+
}
|
|
138
|
+
}), [getWaasWalletConnector]);
|
|
139
|
+
return {
|
|
140
|
+
checkWalletLockState,
|
|
141
|
+
resetState,
|
|
142
|
+
state,
|
|
143
|
+
unlockWallet,
|
|
144
|
+
updatePassword,
|
|
145
|
+
};
|
|
146
|
+
};
|
|
147
|
+
|
|
148
|
+
export { useWalletPassword };
|
|
@@ -77,6 +77,7 @@ require('qrcode');
|
|
|
77
77
|
require('formik');
|
|
78
78
|
require('../../utils/hooks/useSubdomainCheck/useSubdomainCheck.cjs');
|
|
79
79
|
require('../../context/WalletGroupContext/WalletGroupContext.cjs');
|
|
80
|
+
var useDynamicWaas = require('../../utils/hooks/useDynamicWaas/useDynamicWaas.cjs');
|
|
80
81
|
var EnterPasswordView = require('../../widgets/DynamicWidget/views/EnterPasswordView/EnterPasswordView.cjs');
|
|
81
82
|
require('../../utils/hooks/useWalletBackup/useWalletBackup.cjs');
|
|
82
83
|
require('../../utils/hooks/useWalletBackup/types.cjs');
|
|
@@ -110,18 +111,48 @@ var useInternalDynamicContext = require('../../context/DynamicContext/useDynamic
|
|
|
110
111
|
const UnlockWalletView = ({ accountAddress, chainName, }) => {
|
|
111
112
|
const { t } = reactI18next.useTranslation();
|
|
112
113
|
const { setShowAuthFlow } = useInternalDynamicContext.useInternalDynamicContext();
|
|
114
|
+
const { getWaasWalletConnector } = useDynamicWaas.useDynamicWaas();
|
|
113
115
|
const handleContinue = React.useCallback((password) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
|
|
116
|
+
const connector = getWaasWalletConnector(chainName);
|
|
117
|
+
if (!connector) {
|
|
118
|
+
const error = new Error(t('dyn_enter_password.error.failed'));
|
|
119
|
+
dynamicEvents.dynamicEvents.emit('walletUnlockAttempt', {
|
|
120
|
+
accountAddress,
|
|
121
|
+
chainName,
|
|
122
|
+
});
|
|
123
|
+
dynamicEvents.dynamicEvents.emit('walletUnlockFailed', {
|
|
124
|
+
accountAddress,
|
|
125
|
+
chainName,
|
|
126
|
+
error,
|
|
127
|
+
});
|
|
128
|
+
throw error;
|
|
129
|
+
}
|
|
114
130
|
dynamicEvents.dynamicEvents.emit('walletUnlockAttempt', {
|
|
115
131
|
accountAddress,
|
|
116
132
|
chainName,
|
|
117
133
|
});
|
|
134
|
+
try {
|
|
135
|
+
yield connector.unlockWallet({ accountAddress, password });
|
|
136
|
+
}
|
|
137
|
+
catch (error) {
|
|
138
|
+
dynamicEvents.dynamicEvents.emit('walletUnlockFailed', {
|
|
139
|
+
accountAddress,
|
|
140
|
+
chainName,
|
|
141
|
+
error,
|
|
142
|
+
});
|
|
143
|
+
throw error;
|
|
144
|
+
}
|
|
145
|
+
dynamicEvents.dynamicEvents.emit('walletUnlockCompleted', {
|
|
146
|
+
accountAddress,
|
|
147
|
+
chainName,
|
|
148
|
+
});
|
|
118
149
|
dynamicEvents.dynamicEvents.emit('walletUnlockPasswordProvided', {
|
|
119
150
|
accountAddress,
|
|
120
151
|
chainName,
|
|
121
152
|
password,
|
|
122
153
|
});
|
|
123
154
|
setShowAuthFlow(false);
|
|
124
|
-
}), [accountAddress, chainName, setShowAuthFlow]);
|
|
155
|
+
}), [accountAddress, chainName, getWaasWalletConnector, setShowAuthFlow, t]);
|
|
125
156
|
return (jsxRuntime.jsx(EnterPasswordView.EnterPasswordView, { onContinue: handleContinue, title: t('dyn_unlock_wallet.title'), description: t('dyn_unlock_wallet.description'), buttonLabel: t('dyn_unlock_wallet.button.continue') }));
|
|
126
157
|
};
|
|
127
158
|
|
|
@@ -73,6 +73,7 @@ import 'qrcode';
|
|
|
73
73
|
import 'formik';
|
|
74
74
|
import '../../utils/hooks/useSubdomainCheck/useSubdomainCheck.js';
|
|
75
75
|
import '../../context/WalletGroupContext/WalletGroupContext.js';
|
|
76
|
+
import { useDynamicWaas } from '../../utils/hooks/useDynamicWaas/useDynamicWaas.js';
|
|
76
77
|
import { EnterPasswordView } from '../../widgets/DynamicWidget/views/EnterPasswordView/EnterPasswordView.js';
|
|
77
78
|
import '../../utils/hooks/useWalletBackup/useWalletBackup.js';
|
|
78
79
|
import '../../utils/hooks/useWalletBackup/types.js';
|
|
@@ -106,18 +107,48 @@ import { useInternalDynamicContext } from '../../context/DynamicContext/useDynam
|
|
|
106
107
|
const UnlockWalletView = ({ accountAddress, chainName, }) => {
|
|
107
108
|
const { t } = useTranslation();
|
|
108
109
|
const { setShowAuthFlow } = useInternalDynamicContext();
|
|
110
|
+
const { getWaasWalletConnector } = useDynamicWaas();
|
|
109
111
|
const handleContinue = useCallback((password) => __awaiter(void 0, void 0, void 0, function* () {
|
|
112
|
+
const connector = getWaasWalletConnector(chainName);
|
|
113
|
+
if (!connector) {
|
|
114
|
+
const error = new Error(t('dyn_enter_password.error.failed'));
|
|
115
|
+
dynamicEvents.emit('walletUnlockAttempt', {
|
|
116
|
+
accountAddress,
|
|
117
|
+
chainName,
|
|
118
|
+
});
|
|
119
|
+
dynamicEvents.emit('walletUnlockFailed', {
|
|
120
|
+
accountAddress,
|
|
121
|
+
chainName,
|
|
122
|
+
error,
|
|
123
|
+
});
|
|
124
|
+
throw error;
|
|
125
|
+
}
|
|
110
126
|
dynamicEvents.emit('walletUnlockAttempt', {
|
|
111
127
|
accountAddress,
|
|
112
128
|
chainName,
|
|
113
129
|
});
|
|
130
|
+
try {
|
|
131
|
+
yield connector.unlockWallet({ accountAddress, password });
|
|
132
|
+
}
|
|
133
|
+
catch (error) {
|
|
134
|
+
dynamicEvents.emit('walletUnlockFailed', {
|
|
135
|
+
accountAddress,
|
|
136
|
+
chainName,
|
|
137
|
+
error,
|
|
138
|
+
});
|
|
139
|
+
throw error;
|
|
140
|
+
}
|
|
141
|
+
dynamicEvents.emit('walletUnlockCompleted', {
|
|
142
|
+
accountAddress,
|
|
143
|
+
chainName,
|
|
144
|
+
});
|
|
114
145
|
dynamicEvents.emit('walletUnlockPasswordProvided', {
|
|
115
146
|
accountAddress,
|
|
116
147
|
chainName,
|
|
117
148
|
password,
|
|
118
149
|
});
|
|
119
150
|
setShowAuthFlow(false);
|
|
120
|
-
}), [accountAddress, chainName, setShowAuthFlow]);
|
|
151
|
+
}), [accountAddress, chainName, getWaasWalletConnector, setShowAuthFlow, t]);
|
|
121
152
|
return (jsx(EnterPasswordView, { onContinue: handleContinue, title: t('dyn_unlock_wallet.title'), description: t('dyn_unlock_wallet.description'), buttonLabel: t('dyn_unlock_wallet.button.continue') }));
|
|
122
153
|
};
|
|
123
154
|
|
|
@@ -25,6 +25,8 @@ var SetupPasswordConfirmView = require('../../views/SetupPasswordConfirmView/Set
|
|
|
25
25
|
var SetupPasswordKnowledgeCheckView = require('../../views/SetupPasswordKnowledgeCheckView/SetupPasswordKnowledgeCheckView.cjs');
|
|
26
26
|
var SetupPasswordSuccessView = require('../../views/SetupPasswordSuccessView/SetupPasswordSuccessView.cjs');
|
|
27
27
|
require('react-i18next');
|
|
28
|
+
require('../../../../components/Input/Input.cjs');
|
|
29
|
+
require('../../../../components/Accordion/components/AccordionItem/AccordionItem.cjs');
|
|
28
30
|
require('@dynamic-labs/wallet-connector-core');
|
|
29
31
|
require('../../../../shared/logger.cjs');
|
|
30
32
|
require('@dynamic-labs/wallet-book');
|
|
@@ -32,8 +34,6 @@ require('../../../../utils/constants/colors.cjs');
|
|
|
32
34
|
require('../../../../utils/constants/values.cjs');
|
|
33
35
|
require('@dynamic-labs/sdk-api-core');
|
|
34
36
|
require('../../../../shared/consts/index.cjs');
|
|
35
|
-
require('../../../../components/Input/Input.cjs');
|
|
36
|
-
require('../../../../components/Accordion/components/AccordionItem/AccordionItem.cjs');
|
|
37
37
|
require('../../../../components/Alert/Alert.cjs');
|
|
38
38
|
require('../../../../events/dynamicEvents.cjs');
|
|
39
39
|
require('../../../../context/DynamicContext/DynamicContext.cjs');
|
|
@@ -21,6 +21,8 @@ import { SetupPasswordConfirmView } from '../../views/SetupPasswordConfirmView/S
|
|
|
21
21
|
import { SetupPasswordKnowledgeCheckView } from '../../views/SetupPasswordKnowledgeCheckView/SetupPasswordKnowledgeCheckView.js';
|
|
22
22
|
import { SetupPasswordSuccessView } from '../../views/SetupPasswordSuccessView/SetupPasswordSuccessView.js';
|
|
23
23
|
import 'react-i18next';
|
|
24
|
+
import '../../../../components/Input/Input.js';
|
|
25
|
+
import '../../../../components/Accordion/components/AccordionItem/AccordionItem.js';
|
|
24
26
|
import '@dynamic-labs/wallet-connector-core';
|
|
25
27
|
import '../../../../shared/logger.js';
|
|
26
28
|
import '@dynamic-labs/wallet-book';
|
|
@@ -28,8 +30,6 @@ import '../../../../utils/constants/colors.js';
|
|
|
28
30
|
import '../../../../utils/constants/values.js';
|
|
29
31
|
import '@dynamic-labs/sdk-api-core';
|
|
30
32
|
import '../../../../shared/consts/index.js';
|
|
31
|
-
import '../../../../components/Input/Input.js';
|
|
32
|
-
import '../../../../components/Accordion/components/AccordionItem/AccordionItem.js';
|
|
33
33
|
import '../../../../components/Alert/Alert.js';
|
|
34
34
|
import '../../../../events/dynamicEvents.js';
|
|
35
35
|
import '../../../../context/DynamicContext/DynamicContext.js';
|
package/src/lib/widgets/DynamicWidget/views/AccountAndSecuritySettingsView/MfaSection/MfaSection.cjs
CHANGED
|
@@ -114,6 +114,7 @@ require('../../../../../store/state/tokenBalances.cjs');
|
|
|
114
114
|
require('../../../../../store/state/multichainBalances.cjs');
|
|
115
115
|
require('../../../../../shared/utils/functions/getInitialUrl/getInitialUrl.cjs');
|
|
116
116
|
var useIsPasskeysMfaEnabled = require('../../../../../utils/hooks/useIsPasskeysMfaEnabled/useIsPasskeysMfaEnabled.cjs');
|
|
117
|
+
var useWalletPassword = require('../../../../../utils/hooks/useWalletPassword/useWalletPassword.cjs');
|
|
117
118
|
var useInternalDynamicContext = require('../../../../../context/DynamicContext/useDynamicContext/useInternalDynamicContext/useInternalDynamicContext.cjs');
|
|
118
119
|
|
|
119
120
|
const MfaSection = ({ isLoading }) => {
|
|
@@ -123,6 +124,7 @@ const MfaSection = ({ isLoading }) => {
|
|
|
123
124
|
const { primaryWallet } = useInternalDynamicContext.useInternalDynamicContext();
|
|
124
125
|
const { getEOAWallet } = useSmartWallets.useSmartWallets();
|
|
125
126
|
const projectSettings = useProjectSettings.useProjectSettings();
|
|
127
|
+
const { updatePassword } = useWalletPassword.useWalletPassword();
|
|
126
128
|
const isMfaEnabled = useIsMfaEnabled.useIsMfaEnabled();
|
|
127
129
|
const isTotpMfaEnabled = useIsTotpMfaEnabled.useIsTotpMfaEnabled();
|
|
128
130
|
const isPasskeyMfaEnabled = useIsPasskeysMfaEnabled.useIsPasskeysMfaEnabled();
|
|
@@ -136,24 +138,19 @@ const MfaSection = ({ isLoading }) => {
|
|
|
136
138
|
const handlePasscodeClick = React.useCallback(() => {
|
|
137
139
|
setDynamicWidgetView('setup-password', {
|
|
138
140
|
onComplete: (password) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
|
|
139
|
-
if (!(wallet === null || wallet === void 0 ? void 0 : wallet.address)) {
|
|
140
|
-
logger.logger.error('No wallet address available for password setup');
|
|
141
|
+
if (!(wallet === null || wallet === void 0 ? void 0 : wallet.address) || !(wallet === null || wallet === void 0 ? void 0 : wallet.chain)) {
|
|
142
|
+
logger.logger.error('No wallet address or chain available for password setup');
|
|
141
143
|
return;
|
|
142
144
|
}
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
});
|
|
150
|
-
}
|
|
151
|
-
catch (error) {
|
|
152
|
-
logger.logger.error('Failed to update password on modal', error);
|
|
153
|
-
}
|
|
145
|
+
yield updatePassword({
|
|
146
|
+
accountAddress: wallet.address,
|
|
147
|
+
chainName: wallet.chain,
|
|
148
|
+
existingPassword: '',
|
|
149
|
+
newPassword: password,
|
|
150
|
+
});
|
|
154
151
|
}),
|
|
155
152
|
});
|
|
156
|
-
}, [setDynamicWidgetView, wallet]);
|
|
153
|
+
}, [setDynamicWidgetView, wallet, updatePassword]);
|
|
157
154
|
if (!isMfaEnabled && !isWaasWallet) {
|
|
158
155
|
return null;
|
|
159
156
|
}
|
package/src/lib/widgets/DynamicWidget/views/AccountAndSecuritySettingsView/MfaSection/MfaSection.js
CHANGED
|
@@ -110,6 +110,7 @@ import '../../../../../store/state/tokenBalances.js';
|
|
|
110
110
|
import '../../../../../store/state/multichainBalances.js';
|
|
111
111
|
import '../../../../../shared/utils/functions/getInitialUrl/getInitialUrl.js';
|
|
112
112
|
import { useIsPasskeysMfaEnabled } from '../../../../../utils/hooks/useIsPasskeysMfaEnabled/useIsPasskeysMfaEnabled.js';
|
|
113
|
+
import { useWalletPassword } from '../../../../../utils/hooks/useWalletPassword/useWalletPassword.js';
|
|
113
114
|
import { useInternalDynamicContext } from '../../../../../context/DynamicContext/useDynamicContext/useInternalDynamicContext/useInternalDynamicContext.js';
|
|
114
115
|
|
|
115
116
|
const MfaSection = ({ isLoading }) => {
|
|
@@ -119,6 +120,7 @@ const MfaSection = ({ isLoading }) => {
|
|
|
119
120
|
const { primaryWallet } = useInternalDynamicContext();
|
|
120
121
|
const { getEOAWallet } = useSmartWallets();
|
|
121
122
|
const projectSettings = useProjectSettings();
|
|
123
|
+
const { updatePassword } = useWalletPassword();
|
|
122
124
|
const isMfaEnabled = useIsMfaEnabled();
|
|
123
125
|
const isTotpMfaEnabled = useIsTotpMfaEnabled();
|
|
124
126
|
const isPasskeyMfaEnabled = useIsPasskeysMfaEnabled();
|
|
@@ -132,24 +134,19 @@ const MfaSection = ({ isLoading }) => {
|
|
|
132
134
|
const handlePasscodeClick = useCallback(() => {
|
|
133
135
|
setDynamicWidgetView('setup-password', {
|
|
134
136
|
onComplete: (password) => __awaiter(void 0, void 0, void 0, function* () {
|
|
135
|
-
if (!(wallet === null || wallet === void 0 ? void 0 : wallet.address)) {
|
|
136
|
-
logger.error('No wallet address available for password setup');
|
|
137
|
+
if (!(wallet === null || wallet === void 0 ? void 0 : wallet.address) || !(wallet === null || wallet === void 0 ? void 0 : wallet.chain)) {
|
|
138
|
+
logger.error('No wallet address or chain available for password setup');
|
|
137
139
|
return;
|
|
138
140
|
}
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
});
|
|
146
|
-
}
|
|
147
|
-
catch (error) {
|
|
148
|
-
logger.error('Failed to update password on modal', error);
|
|
149
|
-
}
|
|
141
|
+
yield updatePassword({
|
|
142
|
+
accountAddress: wallet.address,
|
|
143
|
+
chainName: wallet.chain,
|
|
144
|
+
existingPassword: '',
|
|
145
|
+
newPassword: password,
|
|
146
|
+
});
|
|
150
147
|
}),
|
|
151
148
|
});
|
|
152
|
-
}, [setDynamicWidgetView, wallet]);
|
|
149
|
+
}, [setDynamicWidgetView, wallet, updatePassword]);
|
|
153
150
|
if (!isMfaEnabled && !isWaasWallet) {
|
|
154
151
|
return null;
|
|
155
152
|
}
|
|
@@ -7,16 +7,17 @@ var _tslib = require('../../../../../../_virtual/_tslib.cjs');
|
|
|
7
7
|
var jsxRuntime = require('react/jsx-runtime');
|
|
8
8
|
var React = require('react');
|
|
9
9
|
var reactI18next = require('react-i18next');
|
|
10
|
-
var ErrorContainer = require('../../../../components/ErrorContainer/ErrorContainer.cjs');
|
|
11
10
|
var Icon = require('../../../../components/Icon/Icon.cjs');
|
|
12
11
|
var Input = require('../../../../components/Input/Input.cjs');
|
|
13
12
|
var ToggleVisibilityButton = require('../../../../components/ToggleVisibilityButton/ToggleVisibilityButton.cjs');
|
|
14
13
|
var Typography = require('../../../../components/Typography/Typography.cjs');
|
|
15
14
|
var TypographyButton = require('../../../../components/TypographyButton/TypographyButton.cjs');
|
|
15
|
+
var errorCircleX = require('../../../../shared/assets/error-circle-x.cjs');
|
|
16
16
|
var passwordLockIcon = require('../../../../shared/assets/password-lock-icon.cjs');
|
|
17
17
|
require('@dynamic-labs/iconic');
|
|
18
18
|
require('../../../../context/ViewContext/ViewContext.cjs');
|
|
19
19
|
|
|
20
|
+
const INVALID_PASSWORD_ERROR_MESSAGE = 'Decryption failed: Invalid password';
|
|
20
21
|
const EnterPasswordView = ({ onContinue, title, description, buttonLabel, isLoading: externalLoading, }) => {
|
|
21
22
|
const { t } = reactI18next.useTranslation();
|
|
22
23
|
const [password, setPassword] = React.useState('');
|
|
@@ -41,9 +42,18 @@ const EnterPasswordView = ({ onContinue, title, description, buttonLabel, isLoad
|
|
|
41
42
|
yield onContinue(password);
|
|
42
43
|
}
|
|
43
44
|
catch (err) {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
45
|
+
let errorMessage;
|
|
46
|
+
if (err instanceof Error) {
|
|
47
|
+
if (err.message.includes(INVALID_PASSWORD_ERROR_MESSAGE)) {
|
|
48
|
+
errorMessage = t('dyn_enter_password.error.invalid_password');
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
errorMessage = err.message;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
errorMessage = t('dyn_enter_password.error.failed');
|
|
56
|
+
}
|
|
47
57
|
setError(errorMessage);
|
|
48
58
|
}
|
|
49
59
|
finally {
|
|
@@ -51,7 +61,7 @@ const EnterPasswordView = ({ onContinue, title, description, buttonLabel, isLoad
|
|
|
51
61
|
}
|
|
52
62
|
}), [password, onContinue, t]);
|
|
53
63
|
const loading = externalLoading || isLoading;
|
|
54
|
-
return (jsxRuntime.jsx("div", { className: 'enter-password-view', children: jsxRuntime.jsxs("div", { className: 'enter-password-view__body', children: [jsxRuntime.jsx(Typography.Typography, { variant: 'title', color: 'primary', copykey: 'dyn_enter_password.title', className: 'enter-password-view__title', style: { marginBottom: '24px', textAlign: 'center' }, children: title !== null && title !== void 0 ? title : t('dyn_enter_password.title') }), jsxRuntime.jsx("div", { className: 'enter-password-view__icon-container', children: jsxRuntime.jsx(Icon.Icon, { color: 'brand-primary', children: jsxRuntime.jsx(passwordLockIcon.ReactComponent, { width: 64, height: 64 }) }) }), jsxRuntime.jsx(Typography.Typography, { variant: 'body_normal', color: 'secondary', copykey: 'dyn_enter_password.description', className: 'enter-password-view__description', children: description !== null && description !== void 0 ? description : t('dyn_enter_password.description') }),
|
|
64
|
+
return (jsxRuntime.jsx("div", { className: 'enter-password-view', children: jsxRuntime.jsxs("div", { className: 'enter-password-view__body', children: [jsxRuntime.jsx(Typography.Typography, { variant: 'title', color: 'primary', copykey: 'dyn_enter_password.title', className: 'enter-password-view__title', style: { marginBottom: '24px', textAlign: 'center' }, children: title !== null && title !== void 0 ? title : t('dyn_enter_password.title') }), jsxRuntime.jsx("div", { className: 'enter-password-view__icon-container', children: jsxRuntime.jsx(Icon.Icon, { color: 'brand-primary', children: jsxRuntime.jsx(passwordLockIcon.ReactComponent, { width: 64, height: 64 }) }) }), jsxRuntime.jsx(Typography.Typography, { variant: 'body_normal', color: 'secondary', copykey: 'dyn_enter_password.description', className: 'enter-password-view__description', children: description !== null && description !== void 0 ? description : t('dyn_enter_password.description') }), jsxRuntime.jsx(Input.Input, { id: 'enter-password-input', type: showPassword ? 'text' : 'password', label: t('dyn_enter_password.label'), placeholder: t('dyn_enter_password.placeholder'), value: password, onChange: handlePasswordChange, variant: 'regular', error: Boolean(error), message: error ? (jsxRuntime.jsxs("span", { className: 'enter-password-view__error-message', children: [jsxRuntime.jsx(errorCircleX.ReactComponent, { width: 14, height: 14 }), error] })) : undefined, suffix:
|
|
55
65
|
// eslint-disable-next-line react/jsx-wrap-multilines
|
|
56
66
|
jsxRuntime.jsx(ToggleVisibilityButton.ToggleVisibilityButton, { initialState: true, onClick: handleToggleVisibility }) }), jsxRuntime.jsx("div", { className: 'enter-password-view__actions', children: jsxRuntime.jsx(TypographyButton.TypographyButton, { dataTestId: 'enter-password-continue-button', onClick: handleContinue, disabled: !password || loading, copykey: 'dyn_enter_password.button.continue', buttonVariant: 'brand-primary', typographyProps: {
|
|
57
67
|
color: 'inherit',
|