@dynamic-labs/sdk-react-core 2.2.2 → 2.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/CHANGELOG.md +22 -2
  2. package/package.cjs +1 -1
  3. package/package.js +1 -1
  4. package/package.json +13 -13
  5. package/src/lib/Main.cjs +1 -0
  6. package/src/lib/Main.js +1 -0
  7. package/src/lib/context/DynamicContext/DynamicContext.cjs +2 -1
  8. package/src/lib/context/DynamicContext/DynamicContext.js +2 -1
  9. package/src/lib/context/WalletContext/WalletContext.cjs +1 -1
  10. package/src/lib/context/WalletContext/WalletContext.js +1 -1
  11. package/src/lib/context/WidgetRegistry/WidgetRegistryContextProvider.cjs +77 -0
  12. package/src/lib/context/WidgetRegistry/WidgetRegistryContextProvider.d.ts +6 -0
  13. package/src/lib/context/WidgetRegistry/WidgetRegistryContextProvider.js +71 -0
  14. package/src/lib/context/WidgetRegistry/index.d.ts +1 -0
  15. package/src/lib/data/api/wallets/wallets.cjs +2 -1
  16. package/src/lib/data/api/wallets/wallets.d.ts +2 -1
  17. package/src/lib/data/api/wallets/wallets.js +2 -1
  18. package/src/lib/events/dynamicEvents.d.ts +2 -1
  19. package/src/lib/events/multiWallet.d.ts +6 -0
  20. package/src/lib/locale/en/translation.cjs +2 -2
  21. package/src/lib/locale/en/translation.d.ts +1 -1
  22. package/src/lib/locale/en/translation.js +2 -2
  23. package/src/lib/styles/index.shadow.cjs +1 -1
  24. package/src/lib/styles/index.shadow.js +1 -1
  25. package/src/lib/utils/hooks/events/useDynamicEvents/useDynamicEvents.d.ts +1 -1
  26. package/src/lib/utils/hooks/multiWallet/useVerifyOnAwaitingSignature/useVerifyOnAwaitingSignature.cjs +39 -13
  27. package/src/lib/utils/hooks/multiWallet/useVerifyOnAwaitingSignature/useVerifyOnAwaitingSignature.js +40 -14
  28. package/src/lib/utils/hooks/useHandleUnlinkWallet/useHandleUnlinkWallet.cjs +3 -1
  29. package/src/lib/utils/hooks/useHandleUnlinkWallet/useHandleUnlinkWallet.js +3 -1
  30. package/src/lib/utils/hooks/useMergeUserAccounts/useMergeUserAccounts.cjs +6 -2
  31. package/src/lib/utils/hooks/useMergeUserAccounts/useMergeUserAccounts.js +6 -2
  32. package/src/lib/utils/hooks/useWalletConnectors/useWalletConnectors.cjs +1 -6
  33. package/src/lib/utils/hooks/useWalletConnectors/useWalletConnectors.js +1 -6
  34. package/src/lib/utils/hooks/useWalletEventListeners/useWalletEventListeners.cjs +69 -25
  35. package/src/lib/utils/hooks/useWalletEventListeners/useWalletEventListeners.js +70 -26
  36. package/src/lib/utils/hooks/useWalletItemActions/useWalletItemActions.cjs +20 -1
  37. package/src/lib/utils/hooks/useWalletItemActions/useWalletItemActions.js +20 -1
  38. package/src/lib/views/MergeUserAccountsView/MergeUserAccountsView.cjs +4 -14
  39. package/src/lib/views/MergeUserAccountsView/MergeUserAccountsView.js +5 -15
  40. package/src/lib/views/SelectHardwareWalletView/SelectHardwareWalletView.cjs +1 -5
  41. package/src/lib/views/SelectHardwareWalletView/SelectHardwareWalletView.js +2 -6
  42. package/src/lib/views/WalletGroupView/WalletGroupView.cjs +1 -6
  43. package/src/lib/views/WalletGroupView/WalletGroupView.js +2 -7
  44. package/src/lib/widgets/DynamicMultiWalletPromptsWidget/DynamicMultiWalletPromptsWidget.cjs +5 -5
  45. package/src/lib/widgets/DynamicMultiWalletPromptsWidget/DynamicMultiWalletPromptsWidget.js +5 -5
  46. package/src/lib/widgets/DynamicWidget/components/DynamicUserProfile/DynamicUserProfile.cjs +4 -1
  47. package/src/lib/widgets/DynamicWidget/components/DynamicUserProfile/DynamicUserProfile.js +4 -1
  48. package/src/lib/widgets/DynamicWidget/prompts/PrimaryNotConnectedModal/PrimaryNotConnectedModal.cjs +1 -1
  49. package/src/lib/widgets/DynamicWidget/prompts/PrimaryNotConnectedModal/PrimaryNotConnectedModal.js +1 -1
@@ -2,7 +2,7 @@ import { DynamicEvents } from '../../../../events';
2
2
  import { EventArgs } from '../types';
3
3
  type DynamicEventListener<E extends keyof DynamicEvents> = (...args: EventArgs<DynamicEvents, E>) => void;
4
4
  /** Allows us to subscribe to all dynamicEvents with a hook, even the internal ones */
5
- export declare const useInternalDynamicEvents: <E extends keyof import("../../../../events/auth").AuthEvents | keyof import("../../../../events/ui").UIEvents | keyof import("../../../../events/otp").OTPEvents | keyof import("../../../../events/wallets").WalletEvents | keyof import("../../../../events/passkey").PasskeyEvents | "farcasterConnectCancelled" | keyof import("../../../../events/embeddedWallet").EmbeddedWalletEvents>(event: E, listener: DynamicEventListener<E>) => void;
5
+ export declare const useInternalDynamicEvents: <E extends keyof import("../../../../events/auth").AuthEvents | keyof import("../../../../events/ui").UIEvents | keyof import("../../../../events/otp").OTPEvents | keyof import("../../../../events/wallets").WalletEvents | keyof import("../../../../events/passkey").PasskeyEvents | "farcasterConnectCancelled" | keyof import("../../../../events/embeddedWallet").EmbeddedWalletEvents | "triggerComputePrimaryWalletMultiWalletStateFromAccounts">(event: E, listener: DynamicEventListener<E>) => void;
6
6
  /** Allows subscribing to dynamic events directly inside components with a hook */
7
7
  export declare const useDynamicEvents: <E extends "logout" | "emailVerificationResult" | "walletAdded" | "embeddedWalletCreated">(event: E, listener: DynamicEventListener<E>) => void;
8
8
  export {};
@@ -3,6 +3,7 @@
3
3
 
4
4
  Object.defineProperty(exports, '__esModule', { value: true });
5
5
 
6
+ var _tslib = require('../../../../../../_virtual/_tslib.cjs');
6
7
  var React = require('react');
7
8
  require('../../../../context/DynamicContext/DynamicContext.cjs');
8
9
  require('@dynamic-labs/sdk-api-core');
@@ -17,8 +18,7 @@ require('../../../constants/values.cjs');
17
18
  require('../../../../shared/utils/classes/storage/localStorage.cjs');
18
19
  require('@dynamic-labs/utils');
19
20
  require('../../../../shared/consts/index.cjs');
20
- require('../../../../events/dynamicEvents.cjs');
21
- require('../../../../../../_virtual/_tslib.cjs');
21
+ var useDynamicEvents = require('../../events/useDynamicEvents/useDynamicEvents.cjs');
22
22
  var useConnectAndSign = require('../../authenticationHooks/useConnectAndSign/useConnectAndSign.cjs');
23
23
  require('../../../../context/ErrorContext/ErrorContext.cjs');
24
24
  require('../../../../context/AccessDeniedContext/AccessDeniedContext.cjs');
@@ -32,6 +32,7 @@ require('viem');
32
32
  require('viem/chains');
33
33
  require('@dynamic-labs/store');
34
34
  require('../../../../locale/locale.cjs');
35
+ require('../../../../events/dynamicEvents.cjs');
35
36
  require('../../../../context/CaptchaContext/CaptchaContext.cjs');
36
37
  require('../../../../context/VerificationContext/VerificationContext.cjs');
37
38
  require('react-dom');
@@ -82,29 +83,54 @@ var useInternalDynamicContext = require('../../../../context/DynamicContext/useD
82
83
  const useVerifyOnAwaitingSignature = () => {
83
84
  const { awaitingSignatureState, multiWalletWidgetState, setMultiWalletWidgetState, legacyIsVerifying, setLegacyIsVerifying, selectedWalletConnector, } = useInternalDynamicContext.useInternalDynamicContext();
84
85
  const triggerConnectAndSign = useConnectAndSign.useConnectAndSign();
86
+ // this is to prevent calling runConnectAndSign multiple times
87
+ // due to changes in legacyIsVerifying
88
+ const isVerifying = React.useRef(false);
89
+ const runConnectAndSign = React.useCallback(() => _tslib.__awaiter(void 0, void 0, void 0, function* () {
90
+ logger.logger.debug('runConnectAndSign', {
91
+ selectedWalletConnector,
92
+ });
93
+ if (!selectedWalletConnector) {
94
+ return;
95
+ }
96
+ isVerifying.current = true;
97
+ setLegacyIsVerifying(true);
98
+ try {
99
+ yield triggerConnectAndSign({
100
+ walletConnector: selectedWalletConnector,
101
+ });
102
+ }
103
+ catch (e) {
104
+ logger.logger.error(e);
105
+ }
106
+ setMultiWalletWidgetState('idle');
107
+ setLegacyIsVerifying(false);
108
+ isVerifying.current = false;
109
+ }), [
110
+ selectedWalletConnector === null || selectedWalletConnector === void 0 ? void 0 : selectedWalletConnector.key,
111
+ setLegacyIsVerifying,
112
+ setMultiWalletWidgetState,
113
+ triggerConnectAndSign,
114
+ ]);
85
115
  React.useEffect(() => {
86
116
  if (!legacyIsVerifying &&
117
+ !isVerifying.current &&
87
118
  multiWalletWidgetState === 'awaiting_signature' &&
88
119
  selectedWalletConnector &&
89
120
  awaitingSignatureState === 'linking_new_wallet' &&
90
121
  !requiresTwoStepAuthentication.requiresTwoStepAuthentication(selectedWalletConnector)) {
91
- setLegacyIsVerifying(true);
92
- triggerConnectAndSign({ walletConnector: selectedWalletConnector })
93
- .catch((e) => {
94
- logger.logger.error(e);
95
- })
96
- .finally(() => {
97
- setMultiWalletWidgetState('idle');
98
- setLegacyIsVerifying(false);
99
- });
122
+ runConnectAndSign();
100
123
  }
101
124
  }, [
125
+ runConnectAndSign,
102
126
  awaitingSignatureState,
103
- selectedWalletConnector === null || selectedWalletConnector === void 0 ? void 0 : selectedWalletConnector.key,
127
+ legacyIsVerifying,
104
128
  multiWalletWidgetState,
129
+ selectedWalletConnector === null || selectedWalletConnector === void 0 ? void 0 : selectedWalletConnector.key,
130
+ setLegacyIsVerifying,
105
131
  setMultiWalletWidgetState,
106
- legacyIsVerifying,
107
132
  ]);
133
+ useDynamicEvents.useInternalDynamicEvents('triggerConnectAndSign', runConnectAndSign);
108
134
  };
109
135
 
110
136
  exports.useVerifyOnAwaitingSignature = useVerifyOnAwaitingSignature;
@@ -1,5 +1,6 @@
1
1
  'use client'
2
- import { useEffect } from 'react';
2
+ import { __awaiter } from '../../../../../../_virtual/_tslib.js';
3
+ import { useRef, useCallback, useEffect } from 'react';
3
4
  import '../../../../context/DynamicContext/DynamicContext.js';
4
5
  import '@dynamic-labs/sdk-api-core';
5
6
  import { logger } from '../../../../shared/logger.js';
@@ -13,8 +14,7 @@ import '../../../constants/values.js';
13
14
  import '../../../../shared/utils/classes/storage/localStorage.js';
14
15
  import '@dynamic-labs/utils';
15
16
  import '../../../../shared/consts/index.js';
16
- import '../../../../events/dynamicEvents.js';
17
- import '../../../../../../_virtual/_tslib.js';
17
+ import { useInternalDynamicEvents } from '../../events/useDynamicEvents/useDynamicEvents.js';
18
18
  import { useConnectAndSign } from '../../authenticationHooks/useConnectAndSign/useConnectAndSign.js';
19
19
  import '../../../../context/ErrorContext/ErrorContext.js';
20
20
  import '../../../../context/AccessDeniedContext/AccessDeniedContext.js';
@@ -28,6 +28,7 @@ import 'viem';
28
28
  import 'viem/chains';
29
29
  import '@dynamic-labs/store';
30
30
  import '../../../../locale/locale.js';
31
+ import '../../../../events/dynamicEvents.js';
31
32
  import '../../../../context/CaptchaContext/CaptchaContext.js';
32
33
  import '../../../../context/VerificationContext/VerificationContext.js';
33
34
  import 'react-dom';
@@ -78,29 +79,54 @@ import { useInternalDynamicContext } from '../../../../context/DynamicContext/us
78
79
  const useVerifyOnAwaitingSignature = () => {
79
80
  const { awaitingSignatureState, multiWalletWidgetState, setMultiWalletWidgetState, legacyIsVerifying, setLegacyIsVerifying, selectedWalletConnector, } = useInternalDynamicContext();
80
81
  const triggerConnectAndSign = useConnectAndSign();
82
+ // this is to prevent calling runConnectAndSign multiple times
83
+ // due to changes in legacyIsVerifying
84
+ const isVerifying = useRef(false);
85
+ const runConnectAndSign = useCallback(() => __awaiter(void 0, void 0, void 0, function* () {
86
+ logger.debug('runConnectAndSign', {
87
+ selectedWalletConnector,
88
+ });
89
+ if (!selectedWalletConnector) {
90
+ return;
91
+ }
92
+ isVerifying.current = true;
93
+ setLegacyIsVerifying(true);
94
+ try {
95
+ yield triggerConnectAndSign({
96
+ walletConnector: selectedWalletConnector,
97
+ });
98
+ }
99
+ catch (e) {
100
+ logger.error(e);
101
+ }
102
+ setMultiWalletWidgetState('idle');
103
+ setLegacyIsVerifying(false);
104
+ isVerifying.current = false;
105
+ }), [
106
+ selectedWalletConnector === null || selectedWalletConnector === void 0 ? void 0 : selectedWalletConnector.key,
107
+ setLegacyIsVerifying,
108
+ setMultiWalletWidgetState,
109
+ triggerConnectAndSign,
110
+ ]);
81
111
  useEffect(() => {
82
112
  if (!legacyIsVerifying &&
113
+ !isVerifying.current &&
83
114
  multiWalletWidgetState === 'awaiting_signature' &&
84
115
  selectedWalletConnector &&
85
116
  awaitingSignatureState === 'linking_new_wallet' &&
86
117
  !requiresTwoStepAuthentication(selectedWalletConnector)) {
87
- setLegacyIsVerifying(true);
88
- triggerConnectAndSign({ walletConnector: selectedWalletConnector })
89
- .catch((e) => {
90
- logger.error(e);
91
- })
92
- .finally(() => {
93
- setMultiWalletWidgetState('idle');
94
- setLegacyIsVerifying(false);
95
- });
118
+ runConnectAndSign();
96
119
  }
97
120
  }, [
121
+ runConnectAndSign,
98
122
  awaitingSignatureState,
99
- selectedWalletConnector === null || selectedWalletConnector === void 0 ? void 0 : selectedWalletConnector.key,
123
+ legacyIsVerifying,
100
124
  multiWalletWidgetState,
125
+ selectedWalletConnector === null || selectedWalletConnector === void 0 ? void 0 : selectedWalletConnector.key,
126
+ setLegacyIsVerifying,
101
127
  setMultiWalletWidgetState,
102
- legacyIsVerifying,
103
128
  ]);
129
+ useInternalDynamicEvents('triggerConnectAndSign', runConnectAndSign);
104
130
  };
105
131
 
106
132
  export { useVerifyOnAwaitingSignature };
@@ -46,6 +46,9 @@ const useHandleUnlinkWallet = ({ verifiedCredentials, environmentId, primaryWall
46
46
  return;
47
47
  yield wallets.unlinkWallet({
48
48
  environmentId,
49
+ onSuccess: () => {
50
+ removedWalletsIds.current.push(walletId);
51
+ },
49
52
  primaryWalletId: currentPrimaryWalletId,
50
53
  walletId,
51
54
  });
@@ -55,7 +58,6 @@ const useHandleUnlinkWallet = ({ verifiedCredentials, environmentId, primaryWall
55
58
  if (numberOfLinkedWallets === 1) {
56
59
  yield (wallet === null || wallet === void 0 ? void 0 : wallet.connector.endSession());
57
60
  }
58
- removedWalletsIds.current.push(walletId);
59
61
  }), [
60
62
  primaryWalletId,
61
63
  environmentId,
@@ -42,6 +42,9 @@ const useHandleUnlinkWallet = ({ verifiedCredentials, environmentId, primaryWall
42
42
  return;
43
43
  yield unlinkWallet({
44
44
  environmentId,
45
+ onSuccess: () => {
46
+ removedWalletsIds.current.push(walletId);
47
+ },
45
48
  primaryWalletId: currentPrimaryWalletId,
46
49
  walletId,
47
50
  });
@@ -51,7 +54,6 @@ const useHandleUnlinkWallet = ({ verifiedCredentials, environmentId, primaryWall
51
54
  if (numberOfLinkedWallets === 1) {
52
55
  yield (wallet === null || wallet === void 0 ? void 0 : wallet.connector.endSession());
53
56
  }
54
- removedWalletsIds.current.push(walletId);
55
57
  }), [
56
58
  primaryWalletId,
57
59
  environmentId,
@@ -26,7 +26,7 @@ require('@dynamic-labs/store');
26
26
  require('../../../locale/locale.cjs');
27
27
  var user = require('../../../data/api/user/user.cjs');
28
28
  require('../../../context/DynamicContext/DynamicContext.cjs');
29
- require('../../../events/dynamicEvents.cjs');
29
+ var dynamicEvents = require('../../../events/dynamicEvents.cjs');
30
30
  require('../../../context/CaptchaContext/CaptchaContext.cjs');
31
31
  require('../../../context/ErrorContext/ErrorContext.cjs');
32
32
  require('../../../context/AccessDeniedContext/AccessDeniedContext.cjs');
@@ -79,7 +79,7 @@ require('../../../widgets/DynamicWidget/views/ManagePasskeysWidgetView/PasskeyCa
79
79
  var useInternalDynamicContext = require('../../../context/DynamicContext/useDynamicContext/useInternalDynamicContext.cjs');
80
80
 
81
81
  const useMergeUserAccounts = () => {
82
- const { environmentId, setShowAuthFlow } = useInternalDynamicContext.useInternalDynamicContext();
82
+ const { environmentId, setShowAuthFlow, selectedWalletConnector } = useInternalDynamicContext.useInternalDynamicContext();
83
83
  const { addedWalletsIds } = UserWalletsContext.useInternalUserWallets();
84
84
  const mergeUserAccounts = (mergeConflictResolutions) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
85
85
  const user$1 = yield user.verifyMergeUsers(environmentId, mergeConflictResolutions);
@@ -87,6 +87,10 @@ const useMergeUserAccounts = () => {
87
87
  if (walletId) {
88
88
  addedWalletsIds.current.push(walletId);
89
89
  }
90
+ const accounts = yield (selectedWalletConnector === null || selectedWalletConnector === void 0 ? void 0 : selectedWalletConnector.getConnectedAccounts());
91
+ if (accounts === null || accounts === void 0 ? void 0 : accounts.length) {
92
+ dynamicEvents.dynamicEvents.emit('triggerComputePrimaryWalletMultiWalletStateFromAccounts', { accounts });
93
+ }
90
94
  setShowAuthFlow(false);
91
95
  });
92
96
  return {
@@ -22,7 +22,7 @@ import '@dynamic-labs/store';
22
22
  import '../../../locale/locale.js';
23
23
  import { verifyMergeUsers } from '../../../data/api/user/user.js';
24
24
  import '../../../context/DynamicContext/DynamicContext.js';
25
- import '../../../events/dynamicEvents.js';
25
+ import { dynamicEvents } from '../../../events/dynamicEvents.js';
26
26
  import '../../../context/CaptchaContext/CaptchaContext.js';
27
27
  import '../../../context/ErrorContext/ErrorContext.js';
28
28
  import '../../../context/AccessDeniedContext/AccessDeniedContext.js';
@@ -75,7 +75,7 @@ import '../../../widgets/DynamicWidget/views/ManagePasskeysWidgetView/PasskeyCar
75
75
  import { useInternalDynamicContext } from '../../../context/DynamicContext/useDynamicContext/useInternalDynamicContext.js';
76
76
 
77
77
  const useMergeUserAccounts = () => {
78
- const { environmentId, setShowAuthFlow } = useInternalDynamicContext();
78
+ const { environmentId, setShowAuthFlow, selectedWalletConnector } = useInternalDynamicContext();
79
79
  const { addedWalletsIds } = useInternalUserWallets();
80
80
  const mergeUserAccounts = (mergeConflictResolutions) => __awaiter(void 0, void 0, void 0, function* () {
81
81
  const user = yield verifyMergeUsers(environmentId, mergeConflictResolutions);
@@ -83,6 +83,10 @@ const useMergeUserAccounts = () => {
83
83
  if (walletId) {
84
84
  addedWalletsIds.current.push(walletId);
85
85
  }
86
+ const accounts = yield (selectedWalletConnector === null || selectedWalletConnector === void 0 ? void 0 : selectedWalletConnector.getConnectedAccounts());
87
+ if (accounts === null || accounts === void 0 ? void 0 : accounts.length) {
88
+ dynamicEvents.emit('triggerComputePrimaryWalletMultiWalletStateFromAccounts', { accounts });
89
+ }
86
90
  setShowAuthFlow(false);
87
91
  });
88
92
  return {
@@ -82,14 +82,9 @@ const useWalletConnectors = ({ authMode, connectedWallets, walletConnectorOption
82
82
  const { setUserWallets } = UserWalletsContext.useInternalUserWallets();
83
83
  // Keep userWallets in sync whenever linkedWallets changes
84
84
  React.useEffect(() => {
85
- // we don't want to set the user wallets until their connected states have been computed
86
- // but that doesn't matter if the wallets list is empty, and if we return early when
87
- // the wallets list is empty, we'll never set the user wallets correctly after logout
88
- if (!didConnectedStateLoad.current && wallets.length)
89
- return;
90
85
  logVerboseTroubleshootingMessage.logVerboseTroubleshootingMessage('[useWalletConnectors] will call setUserWallets', wallets);
91
86
  setUserWallets((userWallets) => updateUserWalletsFromLinkedWallets.updateUserWalletsFromLinkedWallets(userWallets, wallets));
92
- }, [didConnectedStateLoad, setUserWallets, wallets]);
87
+ }, [setUserWallets, wallets]);
93
88
  const primaryWallet = React.useMemo(() => { var _a; return (_a = wallets.find((wallet) => wallet.id === primaryWalletId)) !== null && _a !== void 0 ? _a : null; }, [primaryWalletId, wallets]);
94
89
  const secondaryWallets = React.useMemo(() => canHaveMultipleWalletsConnected
95
90
  ? wallets.filter((wallet) => wallet.id !== primaryWalletId)
@@ -78,14 +78,9 @@ const useWalletConnectors = ({ authMode, connectedWallets, walletConnectorOption
78
78
  const { setUserWallets } = useInternalUserWallets();
79
79
  // Keep userWallets in sync whenever linkedWallets changes
80
80
  useEffect(() => {
81
- // we don't want to set the user wallets until their connected states have been computed
82
- // but that doesn't matter if the wallets list is empty, and if we return early when
83
- // the wallets list is empty, we'll never set the user wallets correctly after logout
84
- if (!didConnectedStateLoad.current && wallets.length)
85
- return;
86
81
  logVerboseTroubleshootingMessage('[useWalletConnectors] will call setUserWallets', wallets);
87
82
  setUserWallets((userWallets) => updateUserWalletsFromLinkedWallets(userWallets, wallets));
88
- }, [didConnectedStateLoad, setUserWallets, wallets]);
83
+ }, [setUserWallets, wallets]);
89
84
  const primaryWallet = useMemo(() => { var _a; return (_a = wallets.find((wallet) => wallet.id === primaryWalletId)) !== null && _a !== void 0 ? _a : null; }, [primaryWalletId, wallets]);
90
85
  const secondaryWallets = useMemo(() => canHaveMultipleWalletsConnected
91
86
  ? wallets.filter((wallet) => wallet.id !== primaryWalletId)
@@ -17,8 +17,17 @@ require('../../constants/values.cjs');
17
17
  require('../../../shared/utils/classes/storage/localStorage.cjs');
18
18
  require('@dynamic-labs/utils');
19
19
  require('../../../shared/consts/index.cjs');
20
- require('../../../events/dynamicEvents.cjs');
20
+ var useDynamicEvents = require('../events/useDynamicEvents/useDynamicEvents.cjs');
21
21
  var useWalletConnectorEvent = require('../events/useWalletConnectorEvent/useWalletConnectorEvent.cjs');
22
+ require('@dynamic-labs/multi-wallet');
23
+ require('react-international-phone');
24
+ require('viem');
25
+ require('viem/chains');
26
+ require('../../../config/ApiEndpoint.cjs');
27
+ require('@dynamic-labs/store');
28
+ require('../../../locale/locale.cjs');
29
+ var logVerboseTroubleshootingMessage = require('../../functions/logVerboseTroubleshootingMessage/logVerboseTroubleshootingMessage.cjs');
30
+ var dynamicEvents = require('../../../events/dynamicEvents.cjs');
22
31
 
23
32
  const useWalletEventListeners = ({ disconnectWallet, handleLogOut, multiWallet, multiWalletWidgetState, primaryWallet, secondaryWallets, selectedWalletConnector, selectedWalletWithAction, setSelectedWalletConnectorKey, setSelectedWalletWithAction, setMultiWalletWidgetState, user, setPrimaryWalletId, authMode, refreshConnectedWallet, }) => {
24
33
  useWalletConnectorEvent.useWalletConnectorEvent(primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.connector, 'disconnect', () => {
@@ -32,9 +41,46 @@ const useWalletEventListeners = ({ disconnectWallet, handleLogOut, multiWallet,
32
41
  }
33
42
  refreshConnectedWallet(primaryWallet.id, primaryWallet.connector);
34
43
  });
35
- useWalletConnectorEvent.useWalletConnectorEvent(primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.connector, 'accountChange', ({ accounts }) => {
36
- logger.logger.debug('primary wallet account change', {
44
+ const handleAccountChangeWhenAwaitingAccountSwitch = React.useCallback((isPrimaryWallet, newAddress) => {
45
+ logger.logger.debug('handleAccountChangeWhenAwaitingAccountSwitch', {
46
+ isPrimaryWallet,
47
+ newAddress,
48
+ });
49
+ const linkedSecondaryWallet = secondaryWallets.find((wallet) => walletConnectorCore.isSameAddress(wallet.address, newAddress, wallet.chain));
50
+ logVerboseTroubleshootingMessage.logVerboseTroubleshootingMessage('[handleAccountChangeWhenAwaitingAccountSwitch]', { linkedSecondaryWallet });
51
+ // this means the user is linking a new account, so we need proof of ownership...
52
+ if (!linkedSecondaryWallet) {
53
+ setMultiWalletWidgetState('awaiting_signature', undefined, 'linking_new_wallet');
54
+ if (isPrimaryWallet && primaryWallet) {
55
+ setSelectedWalletConnectorKey(primaryWallet.connector.key);
56
+ }
57
+ return;
58
+ }
59
+ const isTryingToUpdateUnkownWallet = linkedSecondaryWallet.connector.key === 'unknown';
60
+ if (isTryingToUpdateUnkownWallet) {
61
+ //prompt the user to connect and sign with the wallet
62
+ dynamicEvents.dynamicEvents.emit('triggerConnectAndSign');
63
+ return;
64
+ }
65
+ // ...otherwise, the user is switching primary accounts betweeen the same wallet
66
+ setSelectedWalletWithAction(null);
67
+ setPrimaryWalletId(linkedSecondaryWallet.id);
68
+ setMultiWalletWidgetState('idle');
69
+ }, [
70
+ setMultiWalletWidgetState,
71
+ primaryWallet,
72
+ secondaryWallets,
73
+ setSelectedWalletConnectorKey,
74
+ setSelectedWalletWithAction,
75
+ setPrimaryWalletId,
76
+ ]);
77
+ const calculatePrimaryWalletMultiWalletStateFromAccounts = React.useCallback(({ accounts }) => {
78
+ logger.logger.debug('calculatePrimaryWalletMultiWalletStateFromAccounts', {
37
79
  accounts,
80
+ authMode,
81
+ multiWallet,
82
+ multiWalletWidgetState,
83
+ primaryWallet,
38
84
  });
39
85
  // change the api here
40
86
  if (!primaryWallet)
@@ -74,6 +120,26 @@ const useWalletEventListeners = ({ disconnectWallet, handleLogOut, multiWallet,
74
120
  logger.logger.error(`Unexpected multiWalletWidgetState (${multiWalletWidgetState}) and onAccountChange combination. Resetting state to idle.`);
75
121
  setMultiWalletWidgetState('idle');
76
122
  }
123
+ }, [
124
+ authMode,
125
+ handleAccountChangeWhenAwaitingAccountSwitch,
126
+ multiWallet,
127
+ multiWalletWidgetState,
128
+ primaryWallet,
129
+ refreshConnectedWallet,
130
+ secondaryWallets,
131
+ setMultiWalletWidgetState,
132
+ setPrimaryWalletId,
133
+ setSelectedWalletConnectorKey,
134
+ setSelectedWalletWithAction,
135
+ user,
136
+ ]);
137
+ useDynamicEvents.useInternalDynamicEvents('triggerComputePrimaryWalletMultiWalletStateFromAccounts', calculatePrimaryWalletMultiWalletStateFromAccounts);
138
+ useWalletConnectorEvent.useWalletConnectorEvent(primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.connector, 'accountChange', ({ accounts }) => {
139
+ logger.logger.debug('primary wallet account change', {
140
+ accounts,
141
+ });
142
+ calculatePrimaryWalletMultiWalletStateFromAccounts({ accounts });
77
143
  });
78
144
  const uniqueNonPrimaryWallets = React.useMemo(() => {
79
145
  const primaryConnector = primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.connector;
@@ -117,28 +183,6 @@ const useWalletEventListeners = ({ disconnectWallet, handleLogOut, multiWallet,
117
183
  }
118
184
  }
119
185
  });
120
- const handleAccountChangeWhenAwaitingAccountSwitch = React.useCallback((isPrimaryWallet, newAddress) => {
121
- const linkedSecondaryWallet = secondaryWallets.find((wallet) => walletConnectorCore.isSameAddress(wallet.address, newAddress, wallet.chain));
122
- // this means the user is linking a new account, so we need proof of ownership...
123
- if (!linkedSecondaryWallet) {
124
- setMultiWalletWidgetState('awaiting_signature', undefined, 'linking_new_wallet');
125
- if (isPrimaryWallet && primaryWallet) {
126
- setSelectedWalletConnectorKey(primaryWallet.connector.key);
127
- }
128
- return;
129
- }
130
- // ...otherwise, the user is switching primary accounts betweeen the same wallet
131
- setSelectedWalletWithAction(null);
132
- setPrimaryWalletId(linkedSecondaryWallet.id);
133
- setMultiWalletWidgetState('idle');
134
- }, [
135
- setMultiWalletWidgetState,
136
- primaryWallet,
137
- secondaryWallets,
138
- setSelectedWalletConnectorKey,
139
- setSelectedWalletWithAction,
140
- setPrimaryWalletId,
141
- ]);
142
186
  };
143
187
 
144
188
  exports.useWalletEventListeners = useWalletEventListeners;
@@ -1,6 +1,6 @@
1
1
  'use client'
2
2
  import { __awaiter } from '../../../../../_virtual/_tslib.js';
3
- import { useMemo, useCallback } from 'react';
3
+ import { useCallback, useMemo } from 'react';
4
4
  import { isSameAddress } from '@dynamic-labs/wallet-connector-core';
5
5
  import '@dynamic-labs/sdk-api-core';
6
6
  import { logger } from '../../../shared/logger.js';
@@ -13,8 +13,17 @@ import '../../constants/values.js';
13
13
  import '../../../shared/utils/classes/storage/localStorage.js';
14
14
  import '@dynamic-labs/utils';
15
15
  import '../../../shared/consts/index.js';
16
- import '../../../events/dynamicEvents.js';
16
+ import { useInternalDynamicEvents } from '../events/useDynamicEvents/useDynamicEvents.js';
17
17
  import { useWalletConnectorEvent } from '../events/useWalletConnectorEvent/useWalletConnectorEvent.js';
18
+ import '@dynamic-labs/multi-wallet';
19
+ import 'react-international-phone';
20
+ import 'viem';
21
+ import 'viem/chains';
22
+ import '../../../config/ApiEndpoint.js';
23
+ import '@dynamic-labs/store';
24
+ import '../../../locale/locale.js';
25
+ import { logVerboseTroubleshootingMessage } from '../../functions/logVerboseTroubleshootingMessage/logVerboseTroubleshootingMessage.js';
26
+ import { dynamicEvents } from '../../../events/dynamicEvents.js';
18
27
 
19
28
  const useWalletEventListeners = ({ disconnectWallet, handleLogOut, multiWallet, multiWalletWidgetState, primaryWallet, secondaryWallets, selectedWalletConnector, selectedWalletWithAction, setSelectedWalletConnectorKey, setSelectedWalletWithAction, setMultiWalletWidgetState, user, setPrimaryWalletId, authMode, refreshConnectedWallet, }) => {
20
29
  useWalletConnectorEvent(primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.connector, 'disconnect', () => {
@@ -28,9 +37,46 @@ const useWalletEventListeners = ({ disconnectWallet, handleLogOut, multiWallet,
28
37
  }
29
38
  refreshConnectedWallet(primaryWallet.id, primaryWallet.connector);
30
39
  });
31
- useWalletConnectorEvent(primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.connector, 'accountChange', ({ accounts }) => {
32
- logger.debug('primary wallet account change', {
40
+ const handleAccountChangeWhenAwaitingAccountSwitch = useCallback((isPrimaryWallet, newAddress) => {
41
+ logger.debug('handleAccountChangeWhenAwaitingAccountSwitch', {
42
+ isPrimaryWallet,
43
+ newAddress,
44
+ });
45
+ const linkedSecondaryWallet = secondaryWallets.find((wallet) => isSameAddress(wallet.address, newAddress, wallet.chain));
46
+ logVerboseTroubleshootingMessage('[handleAccountChangeWhenAwaitingAccountSwitch]', { linkedSecondaryWallet });
47
+ // this means the user is linking a new account, so we need proof of ownership...
48
+ if (!linkedSecondaryWallet) {
49
+ setMultiWalletWidgetState('awaiting_signature', undefined, 'linking_new_wallet');
50
+ if (isPrimaryWallet && primaryWallet) {
51
+ setSelectedWalletConnectorKey(primaryWallet.connector.key);
52
+ }
53
+ return;
54
+ }
55
+ const isTryingToUpdateUnkownWallet = linkedSecondaryWallet.connector.key === 'unknown';
56
+ if (isTryingToUpdateUnkownWallet) {
57
+ //prompt the user to connect and sign with the wallet
58
+ dynamicEvents.emit('triggerConnectAndSign');
59
+ return;
60
+ }
61
+ // ...otherwise, the user is switching primary accounts betweeen the same wallet
62
+ setSelectedWalletWithAction(null);
63
+ setPrimaryWalletId(linkedSecondaryWallet.id);
64
+ setMultiWalletWidgetState('idle');
65
+ }, [
66
+ setMultiWalletWidgetState,
67
+ primaryWallet,
68
+ secondaryWallets,
69
+ setSelectedWalletConnectorKey,
70
+ setSelectedWalletWithAction,
71
+ setPrimaryWalletId,
72
+ ]);
73
+ const calculatePrimaryWalletMultiWalletStateFromAccounts = useCallback(({ accounts }) => {
74
+ logger.debug('calculatePrimaryWalletMultiWalletStateFromAccounts', {
33
75
  accounts,
76
+ authMode,
77
+ multiWallet,
78
+ multiWalletWidgetState,
79
+ primaryWallet,
34
80
  });
35
81
  // change the api here
36
82
  if (!primaryWallet)
@@ -70,6 +116,26 @@ const useWalletEventListeners = ({ disconnectWallet, handleLogOut, multiWallet,
70
116
  logger.error(`Unexpected multiWalletWidgetState (${multiWalletWidgetState}) and onAccountChange combination. Resetting state to idle.`);
71
117
  setMultiWalletWidgetState('idle');
72
118
  }
119
+ }, [
120
+ authMode,
121
+ handleAccountChangeWhenAwaitingAccountSwitch,
122
+ multiWallet,
123
+ multiWalletWidgetState,
124
+ primaryWallet,
125
+ refreshConnectedWallet,
126
+ secondaryWallets,
127
+ setMultiWalletWidgetState,
128
+ setPrimaryWalletId,
129
+ setSelectedWalletConnectorKey,
130
+ setSelectedWalletWithAction,
131
+ user,
132
+ ]);
133
+ useInternalDynamicEvents('triggerComputePrimaryWalletMultiWalletStateFromAccounts', calculatePrimaryWalletMultiWalletStateFromAccounts);
134
+ useWalletConnectorEvent(primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.connector, 'accountChange', ({ accounts }) => {
135
+ logger.debug('primary wallet account change', {
136
+ accounts,
137
+ });
138
+ calculatePrimaryWalletMultiWalletStateFromAccounts({ accounts });
73
139
  });
74
140
  const uniqueNonPrimaryWallets = useMemo(() => {
75
141
  const primaryConnector = primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.connector;
@@ -113,28 +179,6 @@ const useWalletEventListeners = ({ disconnectWallet, handleLogOut, multiWallet,
113
179
  }
114
180
  }
115
181
  });
116
- const handleAccountChangeWhenAwaitingAccountSwitch = useCallback((isPrimaryWallet, newAddress) => {
117
- const linkedSecondaryWallet = secondaryWallets.find((wallet) => isSameAddress(wallet.address, newAddress, wallet.chain));
118
- // this means the user is linking a new account, so we need proof of ownership...
119
- if (!linkedSecondaryWallet) {
120
- setMultiWalletWidgetState('awaiting_signature', undefined, 'linking_new_wallet');
121
- if (isPrimaryWallet && primaryWallet) {
122
- setSelectedWalletConnectorKey(primaryWallet.connector.key);
123
- }
124
- return;
125
- }
126
- // ...otherwise, the user is switching primary accounts betweeen the same wallet
127
- setSelectedWalletWithAction(null);
128
- setPrimaryWalletId(linkedSecondaryWallet.id);
129
- setMultiWalletWidgetState('idle');
130
- }, [
131
- setMultiWalletWidgetState,
132
- primaryWallet,
133
- secondaryWallets,
134
- setSelectedWalletConnectorKey,
135
- setSelectedWalletWithAction,
136
- setPrimaryWalletId,
137
- ]);
138
182
  };
139
183
 
140
184
  export { useWalletEventListeners };