@dynamic-labs/sdk-react-core 0.18.13 → 0.18.15
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 +20 -0
- package/package.cjs +1 -1
- package/package.js +1 -1
- package/package.json +8 -8
- package/src/lib/context/DynamicContext/helpers.cjs +28 -1
- package/src/lib/context/DynamicContext/helpers.d.ts +3 -0
- package/src/lib/context/DynamicContext/helpers.js +26 -2
- package/src/lib/data/api.cjs +7 -0
- package/src/lib/data/api.js +7 -0
- package/src/lib/shared/types/index.d.ts +4 -0
- package/src/lib/utils/constants/localStorage.cjs +3 -1
- package/src/lib/utils/constants/localStorage.d.ts +1 -0
- package/src/lib/utils/constants/localStorage.js +3 -2
- package/src/lib/utils/hooks/authenticationHooks/useConnectAndSign/useConnectAndSign.cjs +7 -23
- package/src/lib/utils/hooks/authenticationHooks/useConnectAndSign/useConnectAndSign.js +8 -24
- package/src/lib/utils/hooks/useHandleWalletsToConnect/useHandleWalletsToConnect.cjs +15 -1
- package/src/lib/utils/hooks/useHandleWalletsToConnect/useHandleWalletsToConnect.js +15 -1
- package/src/lib/utils/hooks/useVerifyWallet/useVerifyWallet.cjs +13 -3
- package/src/lib/utils/hooks/useVerifyWallet/useVerifyWallet.js +13 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,4 +1,24 @@
|
|
|
1
1
|
|
|
2
|
+
### [0.18.15](https://github.com/dynamic-labs/DynamicAuth/compare/v0.18.14...v0.18.15) (2023-09-11)
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
### Bug Fixes
|
|
6
|
+
|
|
7
|
+
* sdkSettings should call once per session ([#3189](https://github.com/dynamic-labs/DynamicAuth/issues/3189)) ([#3264](https://github.com/dynamic-labs/DynamicAuth/issues/3264)) ([3f503bb](https://github.com/dynamic-labs/DynamicAuth/commit/3f503bbd43107a22c78d18d8e01e7ea26c83f36c))
|
|
8
|
+
* wallet transition in the bridge ([#3268](https://github.com/dynamic-labs/DynamicAuth/issues/3268)) ([8568387](https://github.com/dynamic-labs/DynamicAuth/commit/8568387461da80c5342f53313ce1dda7647320fa)), closes [#3243](https://github.com/dynamic-labs/DynamicAuth/issues/3243)
|
|
9
|
+
|
|
10
|
+
### [0.18.14](https://github.com/dynamic-labs/DynamicAuth/compare/v0.18.13...v0.18.14) (2023-09-05)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
### Features
|
|
14
|
+
|
|
15
|
+
* add onSignedMessage callback ([#3213](https://github.com/dynamic-labs/DynamicAuth/issues/3213)) ([648defa](https://github.com/dynamic-labs/DynamicAuth/commit/648defa1c5f84805e5dcdbb98a30be2a47f53ed7))
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
### Bug Fixes
|
|
19
|
+
|
|
20
|
+
* prefer mainnet chain id when connecting with WCv2 ([#3219](https://github.com/dynamic-labs/DynamicAuth/issues/3219)) ([6ee8fb6](https://github.com/dynamic-labs/DynamicAuth/commit/6ee8fb6c0565e759837f45179de12c985ac0dd71))
|
|
21
|
+
|
|
2
22
|
### [0.18.13](https://github.com/dynamic-labs/DynamicAuth/compare/v0.18.12...v0.18.13) (2023-08-31)
|
|
3
23
|
|
|
4
24
|
|
package/package.cjs
CHANGED
package/package.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dynamic-labs/sdk-react-core",
|
|
3
|
-
"version": "0.18.
|
|
3
|
+
"version": "0.18.15",
|
|
4
4
|
"repository": {
|
|
5
5
|
"type": "git",
|
|
6
6
|
"url": "https://github.com/dynamic-labs/DynamicAuth.git",
|
|
@@ -16,13 +16,13 @@
|
|
|
16
16
|
"formik": "2.2.9",
|
|
17
17
|
"qrcode": "1.5.1",
|
|
18
18
|
"ethers": "5.7.2",
|
|
19
|
-
"@dynamic-labs/logger": "0.18.
|
|
20
|
-
"@dynamic-labs/multi-wallet": "0.18.
|
|
21
|
-
"@dynamic-labs/rpc-providers": "0.18.
|
|
22
|
-
"@dynamic-labs/types": "0.18.
|
|
23
|
-
"@dynamic-labs/utils": "0.18.
|
|
24
|
-
"@dynamic-labs/wallet-book": "0.18.
|
|
25
|
-
"@dynamic-labs/wallet-connector-core": "0.18.
|
|
19
|
+
"@dynamic-labs/logger": "0.18.15",
|
|
20
|
+
"@dynamic-labs/multi-wallet": "0.18.15",
|
|
21
|
+
"@dynamic-labs/rpc-providers": "0.18.15",
|
|
22
|
+
"@dynamic-labs/types": "0.18.15",
|
|
23
|
+
"@dynamic-labs/utils": "0.18.15",
|
|
24
|
+
"@dynamic-labs/wallet-book": "0.18.15",
|
|
25
|
+
"@dynamic-labs/wallet-connector-core": "0.18.15",
|
|
26
26
|
"eventemitter3": "5.0.1"
|
|
27
27
|
},
|
|
28
28
|
"devDependencies": {
|
|
@@ -11,12 +11,15 @@ require('react');
|
|
|
11
11
|
require('../../shared/logger.cjs');
|
|
12
12
|
require('@dynamic-labs/wallet-book');
|
|
13
13
|
require('@dynamic-labs/utils');
|
|
14
|
+
var localStorage$1 = require('../../utils/constants/localStorage.cjs');
|
|
14
15
|
require('../../utils/constants/colors.cjs');
|
|
15
|
-
require('../../shared/utils/classes/storage/localStorage.cjs');
|
|
16
|
+
var localStorage = require('../../shared/utils/classes/storage/localStorage.cjs');
|
|
16
17
|
require('ethers');
|
|
17
18
|
var getAuthToken = require('../../utils/functions/getAuthToken/getAuthToken.cjs');
|
|
18
19
|
|
|
19
20
|
let logoutTimer;
|
|
21
|
+
let sdkSettingsTimer;
|
|
22
|
+
const sdkSettingsTimeout = 24 * 60 * 60 * 1000; // 24 hours
|
|
20
23
|
const isAuthTokenExpired = (token) => {
|
|
21
24
|
const decoded = decodeJwt.decodeJwt(token);
|
|
22
25
|
if (!decoded) {
|
|
@@ -65,8 +68,32 @@ const getInitialView = ({ connectedWallets, loginWithEmail, isBridgeFlow, isFull
|
|
|
65
68
|
return 'bridge-welcome';
|
|
66
69
|
}
|
|
67
70
|
return 'wallet-list';
|
|
71
|
+
};
|
|
72
|
+
const setSDKSessionSettings = () => {
|
|
73
|
+
const timestamp = new Date().getTime();
|
|
74
|
+
localStorage.LocalStorage.setToLS(localStorage$1.SDK_LAST_SESSION_SETTINGS, timestamp.toString());
|
|
75
|
+
sdkSettingsTimer = setTimeout(isSDKSessionSettingExpired, sdkSettingsTimeout);
|
|
76
|
+
};
|
|
77
|
+
const isSDKSessionSettingExpired = () => {
|
|
78
|
+
const lastSentTime = localStorage.LocalStorage.getFromLS(localStorage$1.SDK_LAST_SESSION_SETTINGS);
|
|
79
|
+
// should set new time
|
|
80
|
+
if (!lastSentTime) {
|
|
81
|
+
return true;
|
|
82
|
+
}
|
|
83
|
+
const lastSentTimestamp = parseInt(lastSentTime);
|
|
84
|
+
const currentTime = new Date().getTime();
|
|
85
|
+
if (currentTime - lastSentTimestamp > sdkSettingsTimeout) {
|
|
86
|
+
// Reset session-related data here
|
|
87
|
+
clearTimeout(sdkSettingsTimer);
|
|
88
|
+
localStorage.LocalStorage.removeFromLS(localStorage$1.SDK_LAST_SESSION_SETTINGS);
|
|
89
|
+
return true;
|
|
90
|
+
}
|
|
91
|
+
return false;
|
|
68
92
|
};
|
|
69
93
|
|
|
70
94
|
exports.getInitialView = getInitialView;
|
|
71
95
|
exports.initExpirationTime = initExpirationTime;
|
|
72
96
|
exports.isAuthTokenExpired = isAuthTokenExpired;
|
|
97
|
+
exports.isSDKSessionSettingExpired = isSDKSessionSettingExpired;
|
|
98
|
+
exports.sdkSettingsTimeout = sdkSettingsTimeout;
|
|
99
|
+
exports.setSDKSessionSettings = setSDKSessionSettings;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Wallet } from '../../shared';
|
|
2
2
|
import { ViewType } from '../ViewContext';
|
|
3
|
+
export declare const sdkSettingsTimeout: number;
|
|
3
4
|
export declare const isAuthTokenExpired: (token: string) => boolean;
|
|
4
5
|
export declare const initExpirationTime: (logout: VoidFunction) => void;
|
|
5
6
|
export declare const getInitialView: ({ connectedWallets, loginWithEmail, isBridgeFlow, isFullyConnected, isMultiWalletEnabled, }: {
|
|
@@ -9,3 +10,5 @@ export declare const getInitialView: ({ connectedWallets, loginWithEmail, isBrid
|
|
|
9
10
|
isFullyConnected: boolean;
|
|
10
11
|
isMultiWalletEnabled: boolean;
|
|
11
12
|
}) => ViewType;
|
|
13
|
+
export declare const setSDKSessionSettings: () => void;
|
|
14
|
+
export declare const isSDKSessionSettingExpired: () => boolean;
|
|
@@ -7,12 +7,15 @@ import 'react';
|
|
|
7
7
|
import '../../shared/logger.js';
|
|
8
8
|
import '@dynamic-labs/wallet-book';
|
|
9
9
|
import '@dynamic-labs/utils';
|
|
10
|
+
import { SDK_LAST_SESSION_SETTINGS } from '../../utils/constants/localStorage.js';
|
|
10
11
|
import '../../utils/constants/colors.js';
|
|
11
|
-
import '../../shared/utils/classes/storage/localStorage.js';
|
|
12
|
+
import { LocalStorage } from '../../shared/utils/classes/storage/localStorage.js';
|
|
12
13
|
import 'ethers';
|
|
13
14
|
import { getAuthToken } from '../../utils/functions/getAuthToken/getAuthToken.js';
|
|
14
15
|
|
|
15
16
|
let logoutTimer;
|
|
17
|
+
let sdkSettingsTimer;
|
|
18
|
+
const sdkSettingsTimeout = 24 * 60 * 60 * 1000; // 24 hours
|
|
16
19
|
const isAuthTokenExpired = (token) => {
|
|
17
20
|
const decoded = decodeJwt(token);
|
|
18
21
|
if (!decoded) {
|
|
@@ -61,6 +64,27 @@ const getInitialView = ({ connectedWallets, loginWithEmail, isBridgeFlow, isFull
|
|
|
61
64
|
return 'bridge-welcome';
|
|
62
65
|
}
|
|
63
66
|
return 'wallet-list';
|
|
67
|
+
};
|
|
68
|
+
const setSDKSessionSettings = () => {
|
|
69
|
+
const timestamp = new Date().getTime();
|
|
70
|
+
LocalStorage.setToLS(SDK_LAST_SESSION_SETTINGS, timestamp.toString());
|
|
71
|
+
sdkSettingsTimer = setTimeout(isSDKSessionSettingExpired, sdkSettingsTimeout);
|
|
72
|
+
};
|
|
73
|
+
const isSDKSessionSettingExpired = () => {
|
|
74
|
+
const lastSentTime = LocalStorage.getFromLS(SDK_LAST_SESSION_SETTINGS);
|
|
75
|
+
// should set new time
|
|
76
|
+
if (!lastSentTime) {
|
|
77
|
+
return true;
|
|
78
|
+
}
|
|
79
|
+
const lastSentTimestamp = parseInt(lastSentTime);
|
|
80
|
+
const currentTime = new Date().getTime();
|
|
81
|
+
if (currentTime - lastSentTimestamp > sdkSettingsTimeout) {
|
|
82
|
+
// Reset session-related data here
|
|
83
|
+
clearTimeout(sdkSettingsTimer);
|
|
84
|
+
LocalStorage.removeFromLS(SDK_LAST_SESSION_SETTINGS);
|
|
85
|
+
return true;
|
|
86
|
+
}
|
|
87
|
+
return false;
|
|
64
88
|
};
|
|
65
89
|
|
|
66
|
-
export { getInitialView, initExpirationTime, isAuthTokenExpired };
|
|
90
|
+
export { getInitialView, initExpirationTime, isAuthTokenExpired, isSDKSessionSettingExpired, sdkSettingsTimeout, setSDKSessionSettings };
|
package/src/lib/data/api.cjs
CHANGED
|
@@ -18,6 +18,7 @@ require('../utils/constants/colors.cjs');
|
|
|
18
18
|
require('../shared/utils/classes/storage/localStorage.cjs');
|
|
19
19
|
require('ethers');
|
|
20
20
|
require('../shared/consts/index.cjs');
|
|
21
|
+
var helpers = require('../context/DynamicContext/helpers.cjs');
|
|
21
22
|
|
|
22
23
|
const sdkApi = (jwt) => {
|
|
23
24
|
const settings = {
|
|
@@ -400,6 +401,11 @@ const getOnrampProviders = ({ chain, environmentId, networkId, token, walletAddr
|
|
|
400
401
|
});
|
|
401
402
|
const sendDynamicProps = (environmentId, settingsToSend) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
|
|
402
403
|
try {
|
|
404
|
+
const isSettingsExpired = helpers.isSDKSessionSettingExpired();
|
|
405
|
+
// sent once. no need to send again
|
|
406
|
+
if (!isSettingsExpired) {
|
|
407
|
+
return;
|
|
408
|
+
}
|
|
403
409
|
const { dynamicContextProps, dynamicWagmiSettings } = settingsToSend;
|
|
404
410
|
if (dynamicContextProps || dynamicWagmiSettings) {
|
|
405
411
|
yield sdkApi().logDynamicSdkSettings({
|
|
@@ -410,6 +416,7 @@ const sendDynamicProps = (environmentId, settingsToSend) => _tslib.__awaiter(voi
|
|
|
410
416
|
},
|
|
411
417
|
});
|
|
412
418
|
}
|
|
419
|
+
helpers.setSDKSessionSettings();
|
|
413
420
|
}
|
|
414
421
|
catch (e) {
|
|
415
422
|
logger.logger.error(e);
|
package/src/lib/data/api.js
CHANGED
|
@@ -14,6 +14,7 @@ import '../utils/constants/colors.js';
|
|
|
14
14
|
import '../shared/utils/classes/storage/localStorage.js';
|
|
15
15
|
import 'ethers';
|
|
16
16
|
import '../shared/consts/index.js';
|
|
17
|
+
import { isSDKSessionSettingExpired, setSDKSessionSettings } from '../context/DynamicContext/helpers.js';
|
|
17
18
|
|
|
18
19
|
const sdkApi = (jwt) => {
|
|
19
20
|
const settings = {
|
|
@@ -396,6 +397,11 @@ const getOnrampProviders = ({ chain, environmentId, networkId, token, walletAddr
|
|
|
396
397
|
});
|
|
397
398
|
const sendDynamicProps = (environmentId, settingsToSend) => __awaiter(void 0, void 0, void 0, function* () {
|
|
398
399
|
try {
|
|
400
|
+
const isSettingsExpired = isSDKSessionSettingExpired();
|
|
401
|
+
// sent once. no need to send again
|
|
402
|
+
if (!isSettingsExpired) {
|
|
403
|
+
return;
|
|
404
|
+
}
|
|
399
405
|
const { dynamicContextProps, dynamicWagmiSettings } = settingsToSend;
|
|
400
406
|
if (dynamicContextProps || dynamicWagmiSettings) {
|
|
401
407
|
yield sdkApi().logDynamicSdkSettings({
|
|
@@ -406,6 +412,7 @@ const sendDynamicProps = (environmentId, settingsToSend) => __awaiter(void 0, vo
|
|
|
406
412
|
},
|
|
407
413
|
});
|
|
408
414
|
}
|
|
415
|
+
setSDKSessionSettings();
|
|
409
416
|
}
|
|
410
417
|
catch (e) {
|
|
411
418
|
logger.error(e);
|
|
@@ -142,6 +142,10 @@ export type DynamicRPCProviders = {
|
|
|
142
142
|
solanaProviders: SolanaRpcProvider[] | undefined;
|
|
143
143
|
};
|
|
144
144
|
export type DynamicEventsCallbacks = {
|
|
145
|
+
onSignedMessage?: (params: {
|
|
146
|
+
messageToSign: string;
|
|
147
|
+
signedMessage: string;
|
|
148
|
+
}) => void;
|
|
145
149
|
onAuthFlowClose?: () => void;
|
|
146
150
|
onAuthFlowOpen?: () => void;
|
|
147
151
|
onAuthSuccess?: OnAuthSuccess;
|
|
@@ -15,7 +15,8 @@ const CONNECTED_WALLETS_INFO = 'dynamic_connected_wallets';
|
|
|
15
15
|
const AUTH_MODE = 'dynamic_auth_mode';
|
|
16
16
|
const CONNECTED_WALLET_NAME_SERVICE = 'dynamic_connected_wallet_ns';
|
|
17
17
|
const IS_FULLY_CONNECTED = 'dynamic_fully_connected';
|
|
18
|
-
const IS_MULTI_WALLET_ENABLED = 'dynamic_multi_wallet_enabled';
|
|
18
|
+
const IS_MULTI_WALLET_ENABLED = 'dynamic_multi_wallet_enabled';
|
|
19
|
+
const SDK_LAST_SESSION_SETTINGS = 'dynamic_session_settings';
|
|
19
20
|
|
|
20
21
|
exports.AUTH_MODE = AUTH_MODE;
|
|
21
22
|
exports.AUTH_TOKEN = AUTH_TOKEN;
|
|
@@ -30,4 +31,5 @@ exports.NEWTOWEB3_WALLET_EXTENSION_FLAG_KEY = NEWTOWEB3_WALLET_EXTENSION_FLAG_KE
|
|
|
30
31
|
exports.NONCE_STORAGE_KEY = NONCE_STORAGE_KEY;
|
|
31
32
|
exports.PRIMARY_WALLET_ID = PRIMARY_WALLET_ID;
|
|
32
33
|
exports.PROJECT_SETTINGS_STORAGE_KEY = PROJECT_SETTINGS_STORAGE_KEY;
|
|
34
|
+
exports.SDK_LAST_SESSION_SETTINGS = SDK_LAST_SESSION_SETTINGS;
|
|
33
35
|
exports.WALLET_PICKER_SEARCH_KEY = WALLET_PICKER_SEARCH_KEY;
|
|
@@ -13,3 +13,4 @@ export declare const AUTH_MODE = "dynamic_auth_mode";
|
|
|
13
13
|
export declare const CONNECTED_WALLET_NAME_SERVICE = "dynamic_connected_wallet_ns";
|
|
14
14
|
export declare const IS_FULLY_CONNECTED = "dynamic_fully_connected";
|
|
15
15
|
export declare const IS_MULTI_WALLET_ENABLED = "dynamic_multi_wallet_enabled";
|
|
16
|
+
export declare const SDK_LAST_SESSION_SETTINGS = "dynamic_session_settings";
|
|
@@ -11,6 +11,7 @@ const CONNECTED_WALLETS_INFO = 'dynamic_connected_wallets';
|
|
|
11
11
|
const AUTH_MODE = 'dynamic_auth_mode';
|
|
12
12
|
const CONNECTED_WALLET_NAME_SERVICE = 'dynamic_connected_wallet_ns';
|
|
13
13
|
const IS_FULLY_CONNECTED = 'dynamic_fully_connected';
|
|
14
|
-
const IS_MULTI_WALLET_ENABLED = 'dynamic_multi_wallet_enabled';
|
|
14
|
+
const IS_MULTI_WALLET_ENABLED = 'dynamic_multi_wallet_enabled';
|
|
15
|
+
const SDK_LAST_SESSION_SETTINGS = 'dynamic_session_settings';
|
|
15
16
|
|
|
16
|
-
export { AUTH_MODE, AUTH_TOKEN, AUTH_USER, CONNECTED_WALLETS_INFO, CONNECTED_WALLET_NAME_SERVICE, IS_FULLY_CONNECTED, IS_MULTI_WALLET_ENABLED, LAST_USED_WALLET, NETWORKS_STORAGE_KEY, NEWTOWEB3_WALLET_EXTENSION_FLAG_KEY, NONCE_STORAGE_KEY, PRIMARY_WALLET_ID, PROJECT_SETTINGS_STORAGE_KEY, WALLET_PICKER_SEARCH_KEY };
|
|
17
|
+
export { AUTH_MODE, AUTH_TOKEN, AUTH_USER, CONNECTED_WALLETS_INFO, CONNECTED_WALLET_NAME_SERVICE, IS_FULLY_CONNECTED, IS_MULTI_WALLET_ENABLED, LAST_USED_WALLET, NETWORKS_STORAGE_KEY, NEWTOWEB3_WALLET_EXTENSION_FLAG_KEY, NONCE_STORAGE_KEY, PRIMARY_WALLET_ID, PROJECT_SETTINGS_STORAGE_KEY, SDK_LAST_SESSION_SETTINGS, WALLET_PICKER_SEARCH_KEY };
|
|
@@ -4,7 +4,6 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
4
4
|
|
|
5
5
|
var _tslib = require('../../../../../../_virtual/_tslib.cjs');
|
|
6
6
|
var walletConnectorCore = require('@dynamic-labs/wallet-connector-core');
|
|
7
|
-
var utils = require('@dynamic-labs/utils');
|
|
8
7
|
var showPendingConnectView = require('../helpers/showPendingConnectView.cjs');
|
|
9
8
|
var isConnectOnly = require('../helpers/isConnectOnly.cjs');
|
|
10
9
|
var useInternalDynamicContext = require('../../../../context/DynamicContext/useInternalDynamicContext.cjs');
|
|
@@ -16,6 +15,7 @@ require('@dynamic-labs/iconic');
|
|
|
16
15
|
require('react/jsx-runtime');
|
|
17
16
|
require('react');
|
|
18
17
|
require('@dynamic-labs/wallet-book');
|
|
18
|
+
require('@dynamic-labs/utils');
|
|
19
19
|
var localStorage$1 = require('../../../constants/localStorage.cjs');
|
|
20
20
|
require('../../../constants/colors.cjs');
|
|
21
21
|
var localStorage = require('../../../../shared/utils/classes/storage/localStorage.cjs');
|
|
@@ -32,7 +32,7 @@ const useConnectAndSign = ({ shouldUpdateWallets = true, shouldCallCallback = tr
|
|
|
32
32
|
const { setView, goToInitialView } = ViewContext.useViewContext();
|
|
33
33
|
const { setErrorMessage } = ErrorContext.useErrorContext();
|
|
34
34
|
const { captchaToken } = CaptchaContext.useCaptchaContext();
|
|
35
|
-
const { authMode, connectWallet, consumeNonce, displaySiweStatement, environmentId, projectSettings, setIsSingleWalletAccount, user, walletUiUtils, setCallback, setIsVerificationInProgress, isFullyConnected, walletsToConnectByChain = [],
|
|
35
|
+
const { authMode, connectWallet, consumeNonce, displaySiweStatement, environmentId, projectSettings, setIsSingleWalletAccount, user, walletUiUtils, setCallback, setIsVerificationInProgress, isFullyConnected, walletsToConnectByChain = [], } = useInternalDynamicContext.useInternalDynamicContext();
|
|
36
36
|
const { handleWalletsToConnect } = useHandleWalletsToConnect.useHandleWalletsToConnect();
|
|
37
37
|
const verifyWallet = useVerifyWallet.useVerifyWallet({
|
|
38
38
|
consumeNonce,
|
|
@@ -42,7 +42,7 @@ const useConnectAndSign = ({ shouldUpdateWallets = true, shouldCallCallback = tr
|
|
|
42
42
|
setIsSingleWalletAccount,
|
|
43
43
|
});
|
|
44
44
|
return ({ walletConnector, fetchPublicAddressOpts = undefined, }) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
|
|
45
|
-
var _a, _b
|
|
45
|
+
var _a, _b;
|
|
46
46
|
// Raise verification ongoing flag
|
|
47
47
|
setIsVerificationInProgress(true);
|
|
48
48
|
try {
|
|
@@ -72,24 +72,8 @@ const useConnectAndSign = ({ shouldUpdateWallets = true, shouldCallCallback = tr
|
|
|
72
72
|
}
|
|
73
73
|
if (isConnectOnly.isConnectOnly(user, authMode)) {
|
|
74
74
|
localStorage.LocalStorage.setToLS(localStorage$1.LAST_USED_WALLET, walletConnector.name);
|
|
75
|
-
if (
|
|
76
|
-
|
|
77
|
-
((_a = utils.last(walletsByChain || [])) === null || _a === void 0 ? void 0 : _a.chain);
|
|
78
|
-
// we don't want to re-calculate wallets to connect state if wallet is already connected.
|
|
79
|
-
// it may happen when user switch network in connect flow on already connected wallet
|
|
80
|
-
const isAlreadyConnected = connectedWallets.find((wallet) => walletConnectorCore.isSameAddress(publicWalletAddress, wallet.address, wallet.chain));
|
|
81
|
-
if (shouldUpdateWallets &&
|
|
82
|
-
(!isAlreadyConnected || didConnectLastWallet)) {
|
|
83
|
-
handleWalletsToConnect();
|
|
84
|
-
}
|
|
85
|
-
if (isAlreadyConnected && !didConnectLastWallet) {
|
|
86
|
-
setView('bridge-next-wallet-connection');
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
else {
|
|
90
|
-
if (shouldUpdateWallets) {
|
|
91
|
-
handleWalletsToConnect();
|
|
92
|
-
}
|
|
75
|
+
if (shouldUpdateWallets) {
|
|
76
|
+
handleWalletsToConnect();
|
|
93
77
|
}
|
|
94
78
|
if (!isFullyConnected || walletsToConnectByChain.length) {
|
|
95
79
|
setCallback('connectSuccess');
|
|
@@ -97,7 +81,7 @@ const useConnectAndSign = ({ shouldUpdateWallets = true, shouldCallCallback = tr
|
|
|
97
81
|
return;
|
|
98
82
|
}
|
|
99
83
|
setCallback('connectSuccess');
|
|
100
|
-
if ((
|
|
84
|
+
if ((_a = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.security.hCaptcha) === null || _a === void 0 ? void 0 : _a.enabled) {
|
|
101
85
|
setView('captcha');
|
|
102
86
|
return;
|
|
103
87
|
}
|
|
@@ -118,7 +102,7 @@ const useConnectAndSign = ({ shouldUpdateWallets = true, shouldCallCallback = tr
|
|
|
118
102
|
const userCancelled = (err === null || err === void 0 ? void 0 : err.code) === 'user-cancelled';
|
|
119
103
|
if (!userCancelled)
|
|
120
104
|
logger.logger.debug(err);
|
|
121
|
-
setErrorMessage((
|
|
105
|
+
setErrorMessage((_b = err === null || err === void 0 ? void 0 : err.code) === null || _b === void 0 ? void 0 : _b.toString());
|
|
122
106
|
goToInitialView();
|
|
123
107
|
// Since auth failed, clear verification flag
|
|
124
108
|
// But if user cancelled, clearStatesOnBackClick will have already cleared it. So avoid
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { __awaiter } from '../../../../../../_virtual/_tslib.js';
|
|
2
|
-
import { isEmailWalletConnector, isEmailOTPWalletConnector, isBloctoConnector
|
|
3
|
-
import { last } from '@dynamic-labs/utils';
|
|
2
|
+
import { isEmailWalletConnector, isEmailOTPWalletConnector, isBloctoConnector } from '@dynamic-labs/wallet-connector-core';
|
|
4
3
|
import { showPendingConnectView } from '../helpers/showPendingConnectView.js';
|
|
5
4
|
import { isConnectOnly } from '../helpers/isConnectOnly.js';
|
|
6
5
|
import { useInternalDynamicContext } from '../../../../context/DynamicContext/useInternalDynamicContext.js';
|
|
@@ -12,6 +11,7 @@ import '@dynamic-labs/iconic';
|
|
|
12
11
|
import 'react/jsx-runtime';
|
|
13
12
|
import 'react';
|
|
14
13
|
import '@dynamic-labs/wallet-book';
|
|
14
|
+
import '@dynamic-labs/utils';
|
|
15
15
|
import { LAST_USED_WALLET } from '../../../constants/localStorage.js';
|
|
16
16
|
import '../../../constants/colors.js';
|
|
17
17
|
import { LocalStorage } from '../../../../shared/utils/classes/storage/localStorage.js';
|
|
@@ -28,7 +28,7 @@ const useConnectAndSign = ({ shouldUpdateWallets = true, shouldCallCallback = tr
|
|
|
28
28
|
const { setView, goToInitialView } = useViewContext();
|
|
29
29
|
const { setErrorMessage } = useErrorContext();
|
|
30
30
|
const { captchaToken } = useCaptchaContext();
|
|
31
|
-
const { authMode, connectWallet, consumeNonce, displaySiweStatement, environmentId, projectSettings, setIsSingleWalletAccount, user, walletUiUtils, setCallback, setIsVerificationInProgress, isFullyConnected, walletsToConnectByChain = [],
|
|
31
|
+
const { authMode, connectWallet, consumeNonce, displaySiweStatement, environmentId, projectSettings, setIsSingleWalletAccount, user, walletUiUtils, setCallback, setIsVerificationInProgress, isFullyConnected, walletsToConnectByChain = [], } = useInternalDynamicContext();
|
|
32
32
|
const { handleWalletsToConnect } = useHandleWalletsToConnect();
|
|
33
33
|
const verifyWallet = useVerifyWallet({
|
|
34
34
|
consumeNonce,
|
|
@@ -38,7 +38,7 @@ const useConnectAndSign = ({ shouldUpdateWallets = true, shouldCallCallback = tr
|
|
|
38
38
|
setIsSingleWalletAccount,
|
|
39
39
|
});
|
|
40
40
|
return ({ walletConnector, fetchPublicAddressOpts = undefined, }) => __awaiter(void 0, void 0, void 0, function* () {
|
|
41
|
-
var _a, _b
|
|
41
|
+
var _a, _b;
|
|
42
42
|
// Raise verification ongoing flag
|
|
43
43
|
setIsVerificationInProgress(true);
|
|
44
44
|
try {
|
|
@@ -68,24 +68,8 @@ const useConnectAndSign = ({ shouldUpdateWallets = true, shouldCallCallback = tr
|
|
|
68
68
|
}
|
|
69
69
|
if (isConnectOnly(user, authMode)) {
|
|
70
70
|
LocalStorage.setToLS(LAST_USED_WALLET, walletConnector.name);
|
|
71
|
-
if (
|
|
72
|
-
|
|
73
|
-
((_a = last(walletsByChain || [])) === null || _a === void 0 ? void 0 : _a.chain);
|
|
74
|
-
// we don't want to re-calculate wallets to connect state if wallet is already connected.
|
|
75
|
-
// it may happen when user switch network in connect flow on already connected wallet
|
|
76
|
-
const isAlreadyConnected = connectedWallets.find((wallet) => isSameAddress(publicWalletAddress, wallet.address, wallet.chain));
|
|
77
|
-
if (shouldUpdateWallets &&
|
|
78
|
-
(!isAlreadyConnected || didConnectLastWallet)) {
|
|
79
|
-
handleWalletsToConnect();
|
|
80
|
-
}
|
|
81
|
-
if (isAlreadyConnected && !didConnectLastWallet) {
|
|
82
|
-
setView('bridge-next-wallet-connection');
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
else {
|
|
86
|
-
if (shouldUpdateWallets) {
|
|
87
|
-
handleWalletsToConnect();
|
|
88
|
-
}
|
|
71
|
+
if (shouldUpdateWallets) {
|
|
72
|
+
handleWalletsToConnect();
|
|
89
73
|
}
|
|
90
74
|
if (!isFullyConnected || walletsToConnectByChain.length) {
|
|
91
75
|
setCallback('connectSuccess');
|
|
@@ -93,7 +77,7 @@ const useConnectAndSign = ({ shouldUpdateWallets = true, shouldCallCallback = tr
|
|
|
93
77
|
return;
|
|
94
78
|
}
|
|
95
79
|
setCallback('connectSuccess');
|
|
96
|
-
if ((
|
|
80
|
+
if ((_a = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.security.hCaptcha) === null || _a === void 0 ? void 0 : _a.enabled) {
|
|
97
81
|
setView('captcha');
|
|
98
82
|
return;
|
|
99
83
|
}
|
|
@@ -114,7 +98,7 @@ const useConnectAndSign = ({ shouldUpdateWallets = true, shouldCallCallback = tr
|
|
|
114
98
|
const userCancelled = (err === null || err === void 0 ? void 0 : err.code) === 'user-cancelled';
|
|
115
99
|
if (!userCancelled)
|
|
116
100
|
logger.debug(err);
|
|
117
|
-
setErrorMessage((
|
|
101
|
+
setErrorMessage((_b = err === null || err === void 0 ? void 0 : err.code) === null || _b === void 0 ? void 0 : _b.toString());
|
|
118
102
|
goToInitialView();
|
|
119
103
|
// Since auth failed, clear verification flag
|
|
120
104
|
// But if user cancelled, clearStatesOnBackClick will have already cleared it. So avoid
|
|
@@ -6,7 +6,7 @@ var useInternalDynamicContext = require('../../../context/DynamicContext/useInte
|
|
|
6
6
|
var ViewContext = require('../../../context/ViewContext/ViewContext.cjs');
|
|
7
7
|
|
|
8
8
|
const useHandleWalletsToConnect = () => {
|
|
9
|
-
const { walletsToConnectByChain, setWalletsToConnectByChain, setShowAuthFlow, setIsFullyConnected, isFullyConnected, } = useInternalDynamicContext.useInternalDynamicContext();
|
|
9
|
+
const { walletsToConnectByChain, setWalletsToConnectByChain, setShowAuthFlow, setIsFullyConnected, selectedWalletConnector, isFullyConnected, } = useInternalDynamicContext.useInternalDynamicContext();
|
|
10
10
|
const { setView, goToInitialView } = ViewContext.useViewContext();
|
|
11
11
|
const handleWalletsToConnect = () => {
|
|
12
12
|
if (!walletsToConnectByChain) {
|
|
@@ -19,6 +19,20 @@ const useHandleWalletsToConnect = () => {
|
|
|
19
19
|
setShowAuthFlow(false);
|
|
20
20
|
return goToInitialView();
|
|
21
21
|
}
|
|
22
|
+
if (!selectedWalletConnector || !selectedWalletConnector.connectedChain) {
|
|
23
|
+
setShowAuthFlow(false);
|
|
24
|
+
return goToInitialView();
|
|
25
|
+
}
|
|
26
|
+
// Assuming based on the logic above that we have at least one more chain/wallet to connect
|
|
27
|
+
// If the current connected wallet is already connected to the bridge,
|
|
28
|
+
// we can go directly to bridge-next-wallet-connection since we know there is a different chain to connect
|
|
29
|
+
const walletChainsToConnect = walletsToConnectByChain
|
|
30
|
+
.filter((wallet) => wallet.numberOfWallets > 0)
|
|
31
|
+
.map((wallet) => wallet.chain.toString());
|
|
32
|
+
if (!walletChainsToConnect.includes(selectedWalletConnector.connectedChain)) {
|
|
33
|
+
setView('bridge-next-wallet-connection');
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
22
36
|
const [firstWallet, ...restOfTheWallets] = walletsToConnectByChain;
|
|
23
37
|
if (firstWallet.numberOfWallets > 1) {
|
|
24
38
|
const updatedWallets = [
|
|
@@ -2,7 +2,7 @@ import { useInternalDynamicContext } from '../../../context/DynamicContext/useIn
|
|
|
2
2
|
import { useViewContext } from '../../../context/ViewContext/ViewContext.js';
|
|
3
3
|
|
|
4
4
|
const useHandleWalletsToConnect = () => {
|
|
5
|
-
const { walletsToConnectByChain, setWalletsToConnectByChain, setShowAuthFlow, setIsFullyConnected, isFullyConnected, } = useInternalDynamicContext();
|
|
5
|
+
const { walletsToConnectByChain, setWalletsToConnectByChain, setShowAuthFlow, setIsFullyConnected, selectedWalletConnector, isFullyConnected, } = useInternalDynamicContext();
|
|
6
6
|
const { setView, goToInitialView } = useViewContext();
|
|
7
7
|
const handleWalletsToConnect = () => {
|
|
8
8
|
if (!walletsToConnectByChain) {
|
|
@@ -15,6 +15,20 @@ const useHandleWalletsToConnect = () => {
|
|
|
15
15
|
setShowAuthFlow(false);
|
|
16
16
|
return goToInitialView();
|
|
17
17
|
}
|
|
18
|
+
if (!selectedWalletConnector || !selectedWalletConnector.connectedChain) {
|
|
19
|
+
setShowAuthFlow(false);
|
|
20
|
+
return goToInitialView();
|
|
21
|
+
}
|
|
22
|
+
// Assuming based on the logic above that we have at least one more chain/wallet to connect
|
|
23
|
+
// If the current connected wallet is already connected to the bridge,
|
|
24
|
+
// we can go directly to bridge-next-wallet-connection since we know there is a different chain to connect
|
|
25
|
+
const walletChainsToConnect = walletsToConnectByChain
|
|
26
|
+
.filter((wallet) => wallet.numberOfWallets > 0)
|
|
27
|
+
.map((wallet) => wallet.chain.toString());
|
|
28
|
+
if (!walletChainsToConnect.includes(selectedWalletConnector.connectedChain)) {
|
|
29
|
+
setView('bridge-next-wallet-connection');
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
18
32
|
const [firstWallet, ...restOfTheWallets] = walletsToConnectByChain;
|
|
19
33
|
if (firstWallet.numberOfWallets > 1) {
|
|
20
34
|
const updatedWallets = [
|
|
@@ -38,7 +38,7 @@ const useVerifyWallet = ({ consumeNonce, displaySiweStatement, environmentId, pr
|
|
|
38
38
|
const { setExistentAccountData } = AccountExistsContext.useAccountExistsContext();
|
|
39
39
|
const { setView, goToInitialView } = ViewContext.useViewContext();
|
|
40
40
|
const { setErrorMessage, setError } = ErrorContext.useErrorContext();
|
|
41
|
-
const { setUser, multiWalletWidgetState, debugError, multiWallet: multiWalletEnabled, appName, primaryWalletId, setCallback, setShowAuthFlow, setPrimaryWalletId, siweStatement, connectedWallet, authMode, setOnboardingOnlyJwt, authToken, setAuthMode, removeConnectedWalletsInfo, setIsVerificationInProgress, } = useInternalDynamicContext.useInternalDynamicContext();
|
|
41
|
+
const { setUser, multiWalletWidgetState, debugError, multiWallet: multiWalletEnabled, appName, primaryWalletId, setCallback, setShowAuthFlow, setPrimaryWalletId, siweStatement, connectedWallet, authMode, setOnboardingOnlyJwt, authToken, setAuthMode, removeConnectedWalletsInfo, setIsVerificationInProgress, eventsCallbacks, } = useInternalDynamicContext.useInternalDynamicContext();
|
|
42
42
|
// If the user is not already logged it means that we only need to verify
|
|
43
43
|
// We need this boolean for the part of the logic where we already persisted a new authToken,
|
|
44
44
|
// and need to distinguish between logic for verify or linking.
|
|
@@ -68,7 +68,7 @@ const useVerifyWallet = ({ consumeNonce, displaySiweStatement, environmentId, pr
|
|
|
68
68
|
if (Jwt === undefined)
|
|
69
69
|
throw new utils.DynamicError('Could not obtain a valid JWT');
|
|
70
70
|
// TODO DYN-523: add verification here that the JWT is valid with the publicKey
|
|
71
|
-
return Jwt;
|
|
71
|
+
return { Jwt, verifyArgs };
|
|
72
72
|
});
|
|
73
73
|
// Overrides the stored primary wallet id when the
|
|
74
74
|
// user logs in for the first time.
|
|
@@ -143,13 +143,23 @@ const useVerifyWallet = ({ consumeNonce, displaySiweStatement, environmentId, pr
|
|
|
143
143
|
}
|
|
144
144
|
};
|
|
145
145
|
return ({ walletConnector, fetchPublicAddressOpts, publicWalletAddress, captchaToken, oauth, }) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
|
|
146
|
+
var _a;
|
|
146
147
|
const walletProvider = getWalletProvider.getWalletProvider(walletConnector);
|
|
147
148
|
try {
|
|
148
149
|
setIsVerificationInProgress(true);
|
|
149
|
-
const Jwt = yield generateJWT(walletConnector, walletProvider, fetchPublicAddressOpts, publicWalletAddress, captchaToken, oauth);
|
|
150
|
+
const { Jwt, verifyArgs } = yield generateJWT(walletConnector, walletProvider, fetchPublicAddressOpts, publicWalletAddress, captchaToken, oauth);
|
|
150
151
|
const decodedJwt = decodeJwt.decodeJwt(Jwt);
|
|
151
152
|
if (decodedJwt === undefined)
|
|
152
153
|
throw new utils.DynamicError('Invalid token!');
|
|
154
|
+
try {
|
|
155
|
+
(_a = eventsCallbacks === null || eventsCallbacks === void 0 ? void 0 : eventsCallbacks.onSignedMessage) === null || _a === void 0 ? void 0 : _a.call(eventsCallbacks, {
|
|
156
|
+
messageToSign: verifyArgs.messageToSign,
|
|
157
|
+
signedMessage: verifyArgs.signedMessage,
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
catch (_b) {
|
|
161
|
+
logger.logger.warn('Error calling onSignedMessage callback');
|
|
162
|
+
}
|
|
153
163
|
const user = yield createUserProfile.createUserProfile(decodedJwt);
|
|
154
164
|
const isKycRequired = decodedJwt.missingFields.length;
|
|
155
165
|
setOnboardingOnlyJwt(Jwt);
|
|
@@ -34,7 +34,7 @@ const useVerifyWallet = ({ consumeNonce, displaySiweStatement, environmentId, pr
|
|
|
34
34
|
const { setExistentAccountData } = useAccountExistsContext();
|
|
35
35
|
const { setView, goToInitialView } = useViewContext();
|
|
36
36
|
const { setErrorMessage, setError } = useErrorContext();
|
|
37
|
-
const { setUser, multiWalletWidgetState, debugError, multiWallet: multiWalletEnabled, appName, primaryWalletId, setCallback, setShowAuthFlow, setPrimaryWalletId, siweStatement, connectedWallet, authMode, setOnboardingOnlyJwt, authToken, setAuthMode, removeConnectedWalletsInfo, setIsVerificationInProgress, } = useInternalDynamicContext();
|
|
37
|
+
const { setUser, multiWalletWidgetState, debugError, multiWallet: multiWalletEnabled, appName, primaryWalletId, setCallback, setShowAuthFlow, setPrimaryWalletId, siweStatement, connectedWallet, authMode, setOnboardingOnlyJwt, authToken, setAuthMode, removeConnectedWalletsInfo, setIsVerificationInProgress, eventsCallbacks, } = useInternalDynamicContext();
|
|
38
38
|
// If the user is not already logged it means that we only need to verify
|
|
39
39
|
// We need this boolean for the part of the logic where we already persisted a new authToken,
|
|
40
40
|
// and need to distinguish between logic for verify or linking.
|
|
@@ -64,7 +64,7 @@ const useVerifyWallet = ({ consumeNonce, displaySiweStatement, environmentId, pr
|
|
|
64
64
|
if (Jwt === undefined)
|
|
65
65
|
throw new DynamicError('Could not obtain a valid JWT');
|
|
66
66
|
// TODO DYN-523: add verification here that the JWT is valid with the publicKey
|
|
67
|
-
return Jwt;
|
|
67
|
+
return { Jwt, verifyArgs };
|
|
68
68
|
});
|
|
69
69
|
// Overrides the stored primary wallet id when the
|
|
70
70
|
// user logs in for the first time.
|
|
@@ -139,13 +139,23 @@ const useVerifyWallet = ({ consumeNonce, displaySiweStatement, environmentId, pr
|
|
|
139
139
|
}
|
|
140
140
|
};
|
|
141
141
|
return ({ walletConnector, fetchPublicAddressOpts, publicWalletAddress, captchaToken, oauth, }) => __awaiter(void 0, void 0, void 0, function* () {
|
|
142
|
+
var _a;
|
|
142
143
|
const walletProvider = getWalletProvider(walletConnector);
|
|
143
144
|
try {
|
|
144
145
|
setIsVerificationInProgress(true);
|
|
145
|
-
const Jwt = yield generateJWT(walletConnector, walletProvider, fetchPublicAddressOpts, publicWalletAddress, captchaToken, oauth);
|
|
146
|
+
const { Jwt, verifyArgs } = yield generateJWT(walletConnector, walletProvider, fetchPublicAddressOpts, publicWalletAddress, captchaToken, oauth);
|
|
146
147
|
const decodedJwt = decodeJwt(Jwt);
|
|
147
148
|
if (decodedJwt === undefined)
|
|
148
149
|
throw new DynamicError('Invalid token!');
|
|
150
|
+
try {
|
|
151
|
+
(_a = eventsCallbacks === null || eventsCallbacks === void 0 ? void 0 : eventsCallbacks.onSignedMessage) === null || _a === void 0 ? void 0 : _a.call(eventsCallbacks, {
|
|
152
|
+
messageToSign: verifyArgs.messageToSign,
|
|
153
|
+
signedMessage: verifyArgs.signedMessage,
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
catch (_b) {
|
|
157
|
+
logger.warn('Error calling onSignedMessage callback');
|
|
158
|
+
}
|
|
149
159
|
const user = yield createUserProfile(decodedJwt);
|
|
150
160
|
const isKycRequired = decodedJwt.missingFields.length;
|
|
151
161
|
setOnboardingOnlyJwt(Jwt);
|