@dynamic-labs/sdk-react-core 0.18.100-viem.13 → 0.18.100-viem.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 CHANGED
@@ -1,4 +1,23 @@
1
1
 
2
+ ### [0.18.100-viem.15](https://github.com/dynamic-labs/DynamicAuth/compare/v0.18.100-viem.14...v0.18.100-viem.15) (2023-09-11)
3
+
4
+
5
+ ### Bug Fixes
6
+ * sdkSettings should call once per session ([#3189](https://github.com/dynamic-labs/DynamicAuth/issues/3189)) ([#3265](https://github.com/dynamic-labs/DynamicAuth/issues/3265)) ([f46a692](https://github.com/dynamic-labs/DynamicAuth/commit/f46a6927684caf5962e5b60a9927030a5f7720e2))
7
+ * wallet transition in the bridge ([#3268](https://github.com/dynamic-labs/DynamicAuth/issues/3268)) ([#3271](https://github.com/dynamic-labs/DynamicAuth/issues/3271)) ([95e6d5f](https://github.com/dynamic-labs/DynamicAuth/commit/95e6d5f6ff003ff428795bdd73e2d88da366ed56)), closes [#3243](https://github.com/dynamic-labs/DynamicAuth/issues/3243)
8
+
9
+ ### [0.18.100-viem.14](https://github.com/dynamic-labs/DynamicAuth/compare/v0.18.100-viem.13...v0.18.100-viem.14) (2023-09-05)
10
+
11
+
12
+ ### Features
13
+
14
+ * add onSignedMessage callback ([#3214](https://github.com/dynamic-labs/DynamicAuth/issues/3214)) ([92fd070](https://github.com/dynamic-labs/DynamicAuth/commit/92fd070c8edabce5ed991cfd92b3745c7afb0b43))
15
+
16
+
17
+ ### Bug Fixes
18
+
19
+ * prefer mainnet chain id when connecting with WCv2 ([#3220](https://github.com/dynamic-labs/DynamicAuth/issues/3220)) ([55eb097](https://github.com/dynamic-labs/DynamicAuth/commit/55eb09739f4c8912a9de2198f69cd925923270c4))
20
+
2
21
  ### [0.18.100-viem.13](https://github.com/dynamic-labs/DynamicAuth/compare/v0.18.100-viem.12...v0.18.100-viem.13) (2023-09-01)
3
22
 
4
23
 
package/package.cjs CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var version = "0.18.100-viem.13";
5
+ var version = "0.18.100-viem.15";
6
6
  var dependencies = {
7
7
  "react-focus-lock": "2.9.2",
8
8
  "@dynamic-labs/iconic": "0.1.27",
package/package.js CHANGED
@@ -1,4 +1,4 @@
1
- var version = "0.18.100-viem.13";
1
+ var version = "0.18.100-viem.15";
2
2
  var dependencies = {
3
3
  "react-focus-lock": "2.9.2",
4
4
  "@dynamic-labs/iconic": "0.1.27",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dynamic-labs/sdk-react-core",
3
- "version": "0.18.100-viem.13",
3
+ "version": "0.18.100-viem.15",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/dynamic-labs/DynamicAuth.git",
@@ -15,13 +15,13 @@
15
15
  "yup": "0.32.11",
16
16
  "formik": "2.2.9",
17
17
  "qrcode": "1.5.1",
18
- "@dynamic-labs/logger": "0.18.100-viem.13",
19
- "@dynamic-labs/multi-wallet": "0.18.100-viem.13",
20
- "@dynamic-labs/rpc-providers": "0.18.100-viem.13",
21
- "@dynamic-labs/types": "0.18.100-viem.13",
22
- "@dynamic-labs/utils": "0.18.100-viem.13",
23
- "@dynamic-labs/wallet-book": "0.18.100-viem.13",
24
- "@dynamic-labs/wallet-connector-core": "0.18.100-viem.13",
18
+ "@dynamic-labs/logger": "0.18.100-viem.15",
19
+ "@dynamic-labs/multi-wallet": "0.18.100-viem.15",
20
+ "@dynamic-labs/rpc-providers": "0.18.100-viem.15",
21
+ "@dynamic-labs/types": "0.18.100-viem.15",
22
+ "@dynamic-labs/utils": "0.18.100-viem.15",
23
+ "@dynamic-labs/wallet-book": "0.18.100-viem.15",
24
+ "@dynamic-labs/wallet-connector-core": "0.18.100-viem.15",
25
25
  "eventemitter3": "5.0.1"
26
26
  },
27
27
  "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('viem');
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) {
@@ -66,7 +69,31 @@ const getInitialView = ({ connectedWallets, loginWithEmail, isBridgeFlow, isFull
66
69
  }
67
70
  return 'wallet-list';
68
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;
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 'viem';
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) {
@@ -62,5 +65,26 @@ const getInitialView = ({ connectedWallets, loginWithEmail, isBridgeFlow, isFull
62
65
  }
63
66
  return 'wallet-list';
64
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;
88
+ };
65
89
 
66
- export { getInitialView, initExpirationTime, isAuthTokenExpired };
90
+ export { getInitialView, initExpirationTime, isAuthTokenExpired, isSDKSessionSettingExpired, sdkSettingsTimeout, setSDKSessionSettings };
@@ -18,6 +18,7 @@ require('../utils/constants/colors.cjs');
18
18
  require('../shared/utils/classes/storage/localStorage.cjs');
19
19
  require('viem');
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);
@@ -14,6 +14,7 @@ import '../utils/constants/colors.js';
14
14
  import '../shared/utils/classes/storage/localStorage.js';
15
15
  import 'viem';
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;
@@ -16,6 +16,7 @@ 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
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";
@@ -12,5 +12,6 @@ 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
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 = [], connectedWallets, isBridgeFlow, selectedWalletConnector, walletsByChain, } = useInternalDynamicContext.useInternalDynamicContext();
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, _c;
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 (isBridgeFlow) {
76
- const didConnectLastWallet = (selectedWalletConnector === null || selectedWalletConnector === void 0 ? void 0 : selectedWalletConnector.connectedChain) ===
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 ((_b = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.security.hCaptcha) === null || _b === void 0 ? void 0 : _b.enabled) {
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((_c = err === null || err === void 0 ? void 0 : err.code) === null || _c === void 0 ? void 0 : _c.toString());
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, isSameAddress } from '@dynamic-labs/wallet-connector-core';
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 = [], connectedWallets, isBridgeFlow, selectedWalletConnector, walletsByChain, } = useInternalDynamicContext();
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, _c;
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 (isBridgeFlow) {
72
- const didConnectLastWallet = (selectedWalletConnector === null || selectedWalletConnector === void 0 ? void 0 : selectedWalletConnector.connectedChain) ===
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 ((_b = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.security.hCaptcha) === null || _b === void 0 ? void 0 : _b.enabled) {
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((_c = err === null || err === void 0 ? void 0 : err.code) === null || _c === void 0 ? void 0 : _c.toString());
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);