@dynamic-labs/sdk-react-core 4.31.4 → 4.32.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,4 +1,16 @@
1
1
 
2
+ ## [4.32.0](https://github.com/dynamic-labs/dynamic-auth/compare/v4.31.4...v4.32.0) (2025-09-17)
3
+
4
+
5
+ ### Features
6
+
7
+ * add methods to check if mfa recovery codes are ackowledged and generate new ones ([#9511](https://github.com/dynamic-labs/dynamic-auth/issues/9511)) ([23598b3](https://github.com/dynamic-labs/dynamic-auth/commit/23598b38b1b3ec75b9aa601a00971a9d5268ab8f))
8
+
9
+
10
+ ### Bug Fixes
11
+
12
+ * primaryWalletChanged not emitted on login with same wallet ([#9515](https://github.com/dynamic-labs/dynamic-auth/issues/9515)) ([cf42dfa](https://github.com/dynamic-labs/dynamic-auth/commit/cf42dfa69daf123c4a796d0fc926c72b44427734))
13
+
2
14
  ### [4.31.4](https://github.com/dynamic-labs/dynamic-auth/compare/v4.31.3...v4.31.4) (2025-09-16)
3
15
 
4
16
 
package/package.cjs CHANGED
@@ -3,7 +3,7 @@
3
3
 
4
4
  Object.defineProperty(exports, '__esModule', { value: true });
5
5
 
6
- var version = "4.31.4";
6
+ var version = "4.32.0";
7
7
  var dependencies = {
8
8
  "@dynamic-labs/sdk-api-core": "0.0.762",
9
9
  "@dynamic-labs-sdk/client": "0.1.0-alpha.3",
package/package.js CHANGED
@@ -1,5 +1,5 @@
1
1
  'use client'
2
- var version = "4.31.4";
2
+ var version = "4.32.0";
3
3
  var dependencies = {
4
4
  "@dynamic-labs/sdk-api-core": "0.0.762",
5
5
  "@dynamic-labs-sdk/client": "0.1.0-alpha.3",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dynamic-labs/sdk-react-core",
3
- "version": "4.31.4",
3
+ "version": "4.32.0",
4
4
  "dependencies": {
5
5
  "@dynamic-labs/sdk-api-core": "0.0.762",
6
6
  "@dynamic-labs-sdk/client": "0.1.0-alpha.3",
@@ -15,16 +15,16 @@
15
15
  "yup": "0.32.11",
16
16
  "react-international-phone": "4.5.0",
17
17
  "bs58": "5.0.0",
18
- "@dynamic-labs/assert-package-version": "4.31.4",
19
- "@dynamic-labs/iconic": "4.31.4",
20
- "@dynamic-labs/logger": "4.31.4",
21
- "@dynamic-labs/multi-wallet": "4.31.4",
22
- "@dynamic-labs/rpc-providers": "4.31.4",
23
- "@dynamic-labs/store": "4.31.4",
24
- "@dynamic-labs/types": "4.31.4",
25
- "@dynamic-labs/utils": "4.31.4",
26
- "@dynamic-labs/wallet-book": "4.31.4",
27
- "@dynamic-labs/wallet-connector-core": "4.31.4",
18
+ "@dynamic-labs/assert-package-version": "4.32.0",
19
+ "@dynamic-labs/iconic": "4.32.0",
20
+ "@dynamic-labs/logger": "4.32.0",
21
+ "@dynamic-labs/multi-wallet": "4.32.0",
22
+ "@dynamic-labs/rpc-providers": "4.32.0",
23
+ "@dynamic-labs/store": "4.32.0",
24
+ "@dynamic-labs/types": "4.32.0",
25
+ "@dynamic-labs/utils": "4.32.0",
26
+ "@dynamic-labs/wallet-book": "4.32.0",
27
+ "@dynamic-labs/wallet-connector-core": "4.32.0",
28
28
  "eventemitter3": "5.0.1"
29
29
  },
30
30
  "devDependencies": {
@@ -178,7 +178,11 @@ const useMfa = () => {
178
178
  }
179
179
  throw new Error('Unsupported MFA device type');
180
180
  }), []);
181
- const getRecoveryCodes = React.useCallback((...args_4) => _tslib.__awaiter(void 0, [...args_4], void 0, function* (generateNewCodes = false) {
181
+ const getRecoveryCodes = React.useCallback((...args_4) => _tslib.__awaiter(void 0, [...args_4], void 0, function* (
182
+ /**
183
+ * @deprecated use getNewRecoveryCodes instead
184
+ */
185
+ generateNewCodes = false) {
182
186
  if (generateNewCodes) {
183
187
  const { recoveryCodes } = yield client.createNewMfaRecoveryCodes();
184
188
  return recoveryCodes;
@@ -188,6 +192,11 @@ const useMfa = () => {
188
192
  return recoveryCodes;
189
193
  }
190
194
  }), []);
195
+ const getNewRecoveryCodes = React.useCallback(() => _tslib.__awaiter(void 0, void 0, void 0, function* () {
196
+ const { recoveryCodes } = yield client.createNewMfaRecoveryCodes();
197
+ return recoveryCodes;
198
+ }), []);
199
+ const isPendingRecoveryCodesAcknowledgment = React.useCallback(() => _tslib.__awaiter(void 0, void 0, void 0, function* () { return client.isPendingRecoveryCodesAcknowledgment(); }), []);
191
200
  const completeAcknowledgement = React.useCallback(() => _tslib.__awaiter(void 0, void 0, void 0, function* () {
192
201
  yield client.acknowledgeRecoveryCodes();
193
202
  }), []);
@@ -199,8 +208,10 @@ const useMfa = () => {
199
208
  authenticateRecoveryCode,
200
209
  completeAcknowledgement,
201
210
  deleteUserDevice,
211
+ getNewRecoveryCodes,
202
212
  getRecoveryCodes,
203
213
  getUserDevices,
214
+ isPendingRecoveryCodesAcknowledgment,
204
215
  updateUserDevice,
205
216
  verifyDevice,
206
217
  };
@@ -42,15 +42,37 @@ type UseMfaHookResult = {
42
42
  */
43
43
  deleteUserDevice: (deviceId: string, mfaAuthToken: string) => Promise<void>;
44
44
  /**
45
- * Get the user's recovery codes
45
+ * Get the current recovery codes for this user.
46
+ *
47
+ * Note: This will throw an error if the user has already acknowledged their recovery codes.
48
+ * In this scenario, you should use getNewRecoveryCodes instead.
49
+ */
50
+ getRecoveryCodes: (
51
+ /**
52
+ * @deprecated use getNewRecoveryCodes instead
53
+ */
54
+ generateNewCodes?: boolean) => Promise<string[]>;
55
+ /**
56
+ * Get the user's devices
46
57
  */
47
- getRecoveryCodes: (generateNewCodes?: boolean) => Promise<string[]>;
48
58
  getUserDevices: () => Promise<MFADevice[]>;
49
59
  updateUserDevice: (deviceId: string) => Promise<void>;
50
60
  /**
51
61
  * @deprecated use authenticateDevice instead
52
62
  */
53
63
  verifyDevice: (code: string, type?: MFADeviceType) => Promise<MFADevice>;
64
+ /**
65
+ * Get new recovery codes for this user.
66
+ * The user will need to acknowledge the new recovery codes.
67
+ */
68
+ getNewRecoveryCodes: () => Promise<string[]>;
69
+ /**
70
+ * Check if the user has already acknowledged their recovery codes.
71
+ *
72
+ * Once the user has acknowledged their recovery codes, the recovery codes will no
73
+ * longer be accessible via getRecoveryCodes.
74
+ */
75
+ isPendingRecoveryCodesAcknowledgment: () => Promise<boolean>;
54
76
  };
55
77
  export declare const useMfa: () => UseMfaHookResult;
56
78
  export {};
@@ -1,7 +1,7 @@
1
1
  'use client'
2
2
  import { __awaiter } from '../../../../../_virtual/_tslib.js';
3
3
  import { useCallback } from 'react';
4
- import { authenticateTotpMfaDevice, getMfaDevices, setDefaultMfaDevice, deleteMfaDevice, registerTotpMfaDevice, authenticateMfaRecoveryCode, createNewMfaRecoveryCodes, getMfaRecoveryCodes, acknowledgeRecoveryCodes } from '@dynamic-labs-sdk/client';
4
+ import { authenticateTotpMfaDevice, getMfaDevices, setDefaultMfaDevice, deleteMfaDevice, registerTotpMfaDevice, authenticateMfaRecoveryCode, createNewMfaRecoveryCodes, getMfaRecoveryCodes, isPendingRecoveryCodesAcknowledgment, acknowledgeRecoveryCodes } from '@dynamic-labs-sdk/client';
5
5
  import { MFADeviceType } from '@dynamic-labs/sdk-api-core';
6
6
  import { verifyTotpMfaDevice } from '../../../client/extension/deprecated/mfa/verifyTotpMfaDevice/verifyTotpMfaDevice.js';
7
7
  import '../../../client/client.js';
@@ -174,7 +174,11 @@ const useMfa = () => {
174
174
  }
175
175
  throw new Error('Unsupported MFA device type');
176
176
  }), []);
177
- const getRecoveryCodes = useCallback((...args_4) => __awaiter(void 0, [...args_4], void 0, function* (generateNewCodes = false) {
177
+ const getRecoveryCodes = useCallback((...args_4) => __awaiter(void 0, [...args_4], void 0, function* (
178
+ /**
179
+ * @deprecated use getNewRecoveryCodes instead
180
+ */
181
+ generateNewCodes = false) {
178
182
  if (generateNewCodes) {
179
183
  const { recoveryCodes } = yield createNewMfaRecoveryCodes();
180
184
  return recoveryCodes;
@@ -184,6 +188,11 @@ const useMfa = () => {
184
188
  return recoveryCodes;
185
189
  }
186
190
  }), []);
191
+ const getNewRecoveryCodes = useCallback(() => __awaiter(void 0, void 0, void 0, function* () {
192
+ const { recoveryCodes } = yield createNewMfaRecoveryCodes();
193
+ return recoveryCodes;
194
+ }), []);
195
+ const isPendingRecoveryCodesAcknowledgment$1 = useCallback(() => __awaiter(void 0, void 0, void 0, function* () { return isPendingRecoveryCodesAcknowledgment(); }), []);
187
196
  const completeAcknowledgement = useCallback(() => __awaiter(void 0, void 0, void 0, function* () {
188
197
  yield acknowledgeRecoveryCodes();
189
198
  }), []);
@@ -195,8 +204,10 @@ const useMfa = () => {
195
204
  authenticateRecoveryCode,
196
205
  completeAcknowledgement,
197
206
  deleteUserDevice,
207
+ getNewRecoveryCodes,
198
208
  getRecoveryCodes,
199
209
  getUserDevices,
210
+ isPendingRecoveryCodesAcknowledgment: isPendingRecoveryCodesAcknowledgment$1,
200
211
  updateUserDevice,
201
212
  verifyDevice,
202
213
  };
@@ -83,9 +83,9 @@ const useWalletConnectors = ({ connectedWallets, walletConnectorOptions, setMult
83
83
  // emit primaryWalletChanged event if the primary wallet changes
84
84
  React.useEffect(() => {
85
85
  if (primaryWallet && primaryWallet.id !== lastPrimaryWalletId.current) {
86
- lastPrimaryWalletId.current = primaryWallet.id;
87
86
  dynamicEvents.dynamicEvents.emit('primaryWalletChanged', primaryWallet);
88
87
  }
88
+ lastPrimaryWalletId.current = primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.id;
89
89
  }, [primaryWallet]);
90
90
  const secondaryWallets = React.useMemo(() => canHaveMultipleWalletsConnected
91
91
  ? wallets.filter((wallet) => wallet.id !== primaryWalletId)
@@ -79,9 +79,9 @@ const useWalletConnectors = ({ connectedWallets, walletConnectorOptions, setMult
79
79
  // emit primaryWalletChanged event if the primary wallet changes
80
80
  useEffect(() => {
81
81
  if (primaryWallet && primaryWallet.id !== lastPrimaryWalletId.current) {
82
- lastPrimaryWalletId.current = primaryWallet.id;
83
82
  dynamicEvents.emit('primaryWalletChanged', primaryWallet);
84
83
  }
84
+ lastPrimaryWalletId.current = primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.id;
85
85
  }, [primaryWallet]);
86
86
  const secondaryWallets = useMemo(() => canHaveMultipleWalletsConnected
87
87
  ? wallets.filter((wallet) => wallet.id !== primaryWalletId)