@dynamic-labs/sdk-react-core 4.0.0-alpha.0 → 4.0.0-alpha.1

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 (99) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/package.cjs +2 -2
  3. package/package.js +2 -2
  4. package/package.json +12 -12
  5. package/src/lib/components/index.d.ts +0 -1
  6. package/src/lib/context/ConnectWithOtpContext/ConnectWithOtpProvider.cjs +5 -2
  7. package/src/lib/context/ConnectWithOtpContext/ConnectWithOtpProvider.js +5 -2
  8. package/src/lib/context/ConnectWithOtpContext/utils/createSmsHandler.cjs +1 -70
  9. package/src/lib/context/ConnectWithOtpContext/utils/createSmsHandler.d.ts +2 -1
  10. package/src/lib/context/ConnectWithOtpContext/utils/createSmsHandler.js +1 -70
  11. package/src/lib/context/DynamicContext/DynamicContext.cjs +6 -5
  12. package/src/lib/context/DynamicContext/DynamicContext.js +6 -5
  13. package/src/lib/context/DynamicContext/hooks/useRegisterStorageService/useRegisterStorageService.cjs +2 -0
  14. package/src/lib/context/DynamicContext/hooks/useRegisterStorageService/useRegisterStorageService.js +3 -1
  15. package/src/lib/context/PhantomRedirectContext/useResponseHandlers.cjs +1 -1
  16. package/src/lib/context/PhantomRedirectContext/useResponseHandlers.js +1 -1
  17. package/src/lib/context/SocialRedirectContext/SocialRedirectContext.cjs +1 -1
  18. package/src/lib/context/SocialRedirectContext/SocialRedirectContext.js +1 -1
  19. package/src/lib/context/ViewContext/types/index.d.ts +1 -1
  20. package/src/lib/data/api/embeddedWallets/embeddedWallets.cjs +12 -5
  21. package/src/lib/data/api/embeddedWallets/embeddedWallets.d.ts +4 -3
  22. package/src/lib/data/api/embeddedWallets/embeddedWallets.js +14 -7
  23. package/src/lib/data/api/transactions/blockaid.cjs +23 -0
  24. package/src/lib/data/api/transactions/blockaid.js +19 -0
  25. package/src/lib/locale/en/translation.cjs +34 -0
  26. package/src/lib/locale/en/translation.d.ts +34 -0
  27. package/src/lib/locale/en/translation.js +34 -0
  28. package/src/lib/shared/assets/caution-triangle.cjs +54 -0
  29. package/src/lib/shared/assets/caution-triangle.js +30 -0
  30. package/src/lib/shared/assets/exclamation-circle.cjs +54 -0
  31. package/src/lib/shared/assets/exclamation-circle.js +30 -0
  32. package/src/lib/shared/assets/exclamation.cjs +52 -0
  33. package/src/lib/shared/assets/exclamation.js +28 -0
  34. package/src/lib/shared/assets/index.d.ts +5 -0
  35. package/src/lib/shared/assets/warning-orange.cjs +54 -0
  36. package/src/lib/shared/assets/warning-orange.js +30 -0
  37. package/src/lib/shared/assets/warning-red.cjs +54 -0
  38. package/src/lib/shared/assets/warning-red.js +30 -0
  39. package/src/lib/styles/index.shadow.cjs +1 -1
  40. package/src/lib/styles/index.shadow.js +1 -1
  41. package/src/lib/utils/constants/localStorage.cjs +6 -0
  42. package/src/lib/utils/constants/localStorage.d.ts +3 -0
  43. package/src/lib/utils/constants/localStorage.js +5 -1
  44. package/src/lib/utils/functions/getNewVerifiedCredentialsFromDiff/getNewVerifiedCredentialsFromDiff.cjs +11 -0
  45. package/src/lib/utils/functions/getNewVerifiedCredentialsFromDiff/getNewVerifiedCredentialsFromDiff.d.ts +2 -0
  46. package/src/lib/utils/functions/getNewVerifiedCredentialsFromDiff/getNewVerifiedCredentialsFromDiff.js +7 -0
  47. package/src/lib/utils/functions/getNewVerifiedCredentialsFromDiff/index.d.ts +1 -0
  48. package/src/lib/utils/hooks/authenticationHooks/useConnectAndSign/useConnectAndSign.cjs +1 -1
  49. package/src/lib/utils/hooks/authenticationHooks/useConnectAndSign/useConnectAndSign.js +1 -1
  50. package/src/lib/utils/hooks/authenticationHooks/useConnectAndSignSplitSteps/useConnectAndSignSplitSteps.cjs +1 -1
  51. package/src/lib/utils/hooks/authenticationHooks/useConnectAndSignSplitSteps/useConnectAndSignSplitSteps.js +1 -1
  52. package/src/lib/utils/hooks/authenticationHooks/useSignConnectOnlyUser/useSignConnectOnlyUser.cjs +1 -1
  53. package/src/lib/utils/hooks/authenticationHooks/useSignConnectOnlyUser/useSignConnectOnlyUser.js +1 -1
  54. package/src/lib/utils/hooks/index.d.ts +1 -0
  55. package/src/lib/utils/hooks/useAuthLayoutChecks/useAuthLayoutChecks.cjs +1 -0
  56. package/src/lib/utils/hooks/useAuthLayoutChecks/useAuthLayoutChecks.js +1 -0
  57. package/src/lib/utils/hooks/useEmbeddedWallet/useSecureEnclaveEmbeddedWallet/useSecureEnclaveEmbeddedWallet.cjs +9 -2
  58. package/src/lib/utils/hooks/useEmbeddedWallet/useSecureEnclaveEmbeddedWallet/useSecureEnclaveEmbeddedWallet.js +9 -2
  59. package/src/lib/utils/hooks/useEmbeddedWallet/useSecureEnclaveEmbeddedWallet/utils.cjs +15 -2
  60. package/src/lib/utils/hooks/useEmbeddedWallet/useSecureEnclaveEmbeddedWallet/utils.d.ts +3 -1
  61. package/src/lib/utils/hooks/useEmbeddedWallet/useSecureEnclaveEmbeddedWallet/utils.js +15 -3
  62. package/src/lib/utils/hooks/useEmbeddedWalletSessionKeys/useEmbeddedWalletSessionKeys.cjs +82 -26
  63. package/src/lib/utils/hooks/useEmbeddedWalletSessionKeys/useEmbeddedWalletSessionKeys.d.ts +19 -2
  64. package/src/lib/utils/hooks/useEmbeddedWalletSessionKeys/useEmbeddedWalletSessionKeys.js +82 -26
  65. package/src/lib/utils/hooks/useEndUserWarning/index.d.ts +1 -0
  66. package/src/lib/utils/hooks/useEndUserWarning/useEndUserWarning.cjs +37 -0
  67. package/src/lib/utils/hooks/useEndUserWarning/useEndUserWarning.d.ts +5 -0
  68. package/src/lib/utils/hooks/useEndUserWarning/useEndUserWarning.js +33 -0
  69. package/src/lib/utils/hooks/useExternalAuth/useExternalAuth.cjs +5 -2
  70. package/src/lib/utils/hooks/useExternalAuth/useExternalAuth.js +5 -2
  71. package/src/lib/utils/hooks/useSetWalletConnectorFetchers/useSetWalletConnectorFetchers.cjs +2 -2
  72. package/src/lib/utils/hooks/useSetWalletConnectorFetchers/useSetWalletConnectorFetchers.d.ts +2 -1
  73. package/src/lib/utils/hooks/useSetWalletConnectorFetchers/useSetWalletConnectorFetchers.js +2 -2
  74. package/src/lib/utils/hooks/useSocialAuth/useSocialAuth.cjs +7 -3
  75. package/src/lib/utils/hooks/useSocialAuth/useSocialAuth.d.ts +2 -1
  76. package/src/lib/utils/hooks/useSocialAuth/useSocialAuth.js +7 -3
  77. package/src/lib/utils/hooks/useTelegramLogin/useTelegramLogin.cjs +25 -24
  78. package/src/lib/utils/hooks/useTelegramLogin/useTelegramLogin.d.ts +7 -1
  79. package/src/lib/utils/hooks/useTelegramLogin/useTelegramLogin.js +25 -24
  80. package/src/lib/utils/hooks/useVerifyWallet/useVerifyWallet.cjs +4 -1
  81. package/src/lib/utils/hooks/useVerifyWallet/useVerifyWallet.js +4 -1
  82. package/src/lib/views/EmailVerification/EmailVerification.cjs +4 -1
  83. package/src/lib/views/EmailVerification/EmailVerification.js +4 -1
  84. package/src/lib/views/GlobalWalletMaliciousView/GlobalWalletMaliciousView.cjs +139 -0
  85. package/src/lib/views/GlobalWalletMaliciousView/GlobalWalletMaliciousView.d.ts +11 -0
  86. package/src/lib/views/GlobalWalletMaliciousView/GlobalWalletMaliciousView.js +134 -0
  87. package/src/lib/views/SmsVerification/useSmsVerification/useSmsVerification.cjs +5 -2
  88. package/src/lib/views/SmsVerification/useSmsVerification/useSmsVerification.js +5 -2
  89. package/src/lib/views/viewToComponentMap.cjs +2 -0
  90. package/src/lib/views/viewToComponentMap.d.ts +1 -0
  91. package/src/lib/views/viewToComponentMap.js +2 -0
  92. package/src/lib/widgets/DynamicWidget/views/GlobalWalletView/GlobalWalletView.cjs +31 -8
  93. package/src/lib/widgets/DynamicWidget/views/GlobalWalletView/GlobalWalletView.js +31 -8
  94. package/src/lib/components/TelegramAutoLogin/TelegramAutoLogin.cjs +0 -99
  95. package/src/lib/components/TelegramAutoLogin/TelegramAutoLogin.d.ts +0 -1
  96. package/src/lib/components/TelegramAutoLogin/TelegramAutoLogin.js +0 -95
  97. package/src/lib/components/TelegramAutoLogin/index.d.ts +0 -1
  98. package/src/lib/utils/constants/sessionStorage.cjs +0 -12
  99. package/src/lib/utils/constants/sessionStorage.js +0 -7
@@ -26,6 +26,10 @@ const CAPTCHA_TOKEN = 'dynamic_captcha_token';
26
26
  */
27
27
  const PHANTOM_SIGNATURE_STATE = 'phantom_verification_type';
28
28
  const STORE_STORAGE_KEY = 'dynamic_store';
29
+ const SECURE_ENCLAVE_WALLET_SESSION_KEYS = 'dynamic_secure_enclave_session_keys';
30
+ const SECURE_ENCLAVE_WALLET_SESSION_KEYS_STORAGE_OPTIONS = {
31
+ priority: ['secureStorage', 'localStorage'],
32
+ };
29
33
 
30
34
  exports.AUTH_EXPIRES_AT = AUTH_EXPIRES_AT;
31
35
  exports.AUTH_MIN_TOKEN = AUTH_MIN_TOKEN;
@@ -44,6 +48,8 @@ exports.NONCE_STORAGE_KEY = NONCE_STORAGE_KEY;
44
48
  exports.PHANTOM_SIGNATURE_STATE = PHANTOM_SIGNATURE_STATE;
45
49
  exports.PHONE_INPUT_DEFAULT_COUNTRY = PHONE_INPUT_DEFAULT_COUNTRY;
46
50
  exports.PRIMARY_WALLET_ID = PRIMARY_WALLET_ID;
51
+ exports.SECURE_ENCLAVE_WALLET_SESSION_KEYS = SECURE_ENCLAVE_WALLET_SESSION_KEYS;
52
+ exports.SECURE_ENCLAVE_WALLET_SESSION_KEYS_STORAGE_OPTIONS = SECURE_ENCLAVE_WALLET_SESSION_KEYS_STORAGE_OPTIONS;
47
53
  exports.STORE_STORAGE_KEY = STORE_STORAGE_KEY;
48
54
  exports.WAGMI_LAST_SESSION_SETTINGS = WAGMI_LAST_SESSION_SETTINGS;
49
55
  exports.WALLET_PICKER_SEARCH_KEY = WALLET_PICKER_SEARCH_KEY;
@@ -1,3 +1,4 @@
1
+ import { StorageOptions } from '@dynamic-labs/utils';
1
2
  export declare const AUTH_TOKEN = "dynamic_authentication_token";
2
3
  export declare const AUTH_MIN_TOKEN = "dynamic_min_authentication_token";
3
4
  export declare const AUTH_EXPIRES_AT = "dynamic_auth_expires_at";
@@ -33,3 +34,5 @@ export type PhantomSignatureState = {
33
34
  export declare const PHANTOM_SIGNATURE_STATE = "phantom_verification_type";
34
35
  export declare const STORE_STORAGE_KEY = "dynamic_store";
35
36
  export declare const IP_LOOKUP_STORAGE_KEY = "dynamic_ip_lookup";
37
+ export declare const SECURE_ENCLAVE_WALLET_SESSION_KEYS = "dynamic_secure_enclave_session_keys";
38
+ export declare const SECURE_ENCLAVE_WALLET_SESSION_KEYS_STORAGE_OPTIONS: StorageOptions;
@@ -22,5 +22,9 @@ const CAPTCHA_TOKEN = 'dynamic_captcha_token';
22
22
  */
23
23
  const PHANTOM_SIGNATURE_STATE = 'phantom_verification_type';
24
24
  const STORE_STORAGE_KEY = 'dynamic_store';
25
+ const SECURE_ENCLAVE_WALLET_SESSION_KEYS = 'dynamic_secure_enclave_session_keys';
26
+ const SECURE_ENCLAVE_WALLET_SESSION_KEYS_STORAGE_OPTIONS = {
27
+ priority: ['secureStorage', 'localStorage'],
28
+ };
25
29
 
26
- export { AUTH_EXPIRES_AT, AUTH_MIN_TOKEN, AUTH_MODE, AUTH_TOKEN, BRIDGE_ONBOARDING_COMPLETED, CAPTCHA_TOKEN, CONNECTED_WALLETS_INFO, CONNECTED_WALLET_NAME_SERVICE, DYNAMIC_CONTEXT_LAST_SESSION_SETTINGS, EMBEDDED_WALLET_SECURE_BANNER, EMBEDDED_WALLET_SESSION_SETTINGS, LAST_USED_WALLET, NEWTOWEB3_WALLET_EXTENSION_FLAG_KEY, NONCE_STORAGE_KEY, PHANTOM_SIGNATURE_STATE, PHONE_INPUT_DEFAULT_COUNTRY, PRIMARY_WALLET_ID, STORE_STORAGE_KEY, WAGMI_LAST_SESSION_SETTINGS, WALLET_PICKER_SEARCH_KEY };
30
+ export { AUTH_EXPIRES_AT, AUTH_MIN_TOKEN, AUTH_MODE, AUTH_TOKEN, BRIDGE_ONBOARDING_COMPLETED, CAPTCHA_TOKEN, CONNECTED_WALLETS_INFO, CONNECTED_WALLET_NAME_SERVICE, DYNAMIC_CONTEXT_LAST_SESSION_SETTINGS, EMBEDDED_WALLET_SECURE_BANNER, EMBEDDED_WALLET_SESSION_SETTINGS, LAST_USED_WALLET, NEWTOWEB3_WALLET_EXTENSION_FLAG_KEY, NONCE_STORAGE_KEY, PHANTOM_SIGNATURE_STATE, PHONE_INPUT_DEFAULT_COUNTRY, PRIMARY_WALLET_ID, SECURE_ENCLAVE_WALLET_SESSION_KEYS, SECURE_ENCLAVE_WALLET_SESSION_KEYS_STORAGE_OPTIONS, STORE_STORAGE_KEY, WAGMI_LAST_SESSION_SETTINGS, WALLET_PICKER_SEARCH_KEY };
@@ -0,0 +1,11 @@
1
+ 'use client'
2
+ 'use strict';
3
+
4
+ Object.defineProperty(exports, '__esModule', { value: true });
5
+
6
+ const getNewVerifiedCredentialsFromDiff = (verifiedCredentialsA, verifiedCredentialsB) => {
7
+ const knownIds = verifiedCredentialsA.map((vc) => vc.id);
8
+ return verifiedCredentialsB.filter((vc) => !knownIds.includes(vc.id));
9
+ };
10
+
11
+ exports.getNewVerifiedCredentialsFromDiff = getNewVerifiedCredentialsFromDiff;
@@ -0,0 +1,2 @@
1
+ import { JwtVerifiedCredential } from '@dynamic-labs/sdk-api-core';
2
+ export declare const getNewVerifiedCredentialsFromDiff: (verifiedCredentialsA: JwtVerifiedCredential[], verifiedCredentialsB: JwtVerifiedCredential[]) => JwtVerifiedCredential[];
@@ -0,0 +1,7 @@
1
+ 'use client'
2
+ const getNewVerifiedCredentialsFromDiff = (verifiedCredentialsA, verifiedCredentialsB) => {
3
+ const knownIds = verifiedCredentialsA.map((vc) => vc.id);
4
+ return verifiedCredentialsB.filter((vc) => !knownIds.includes(vc.id));
5
+ };
6
+
7
+ export { getNewVerifiedCredentialsFromDiff };
@@ -0,0 +1 @@
1
+ export { getNewVerifiedCredentialsFromDiff } from './getNewVerifiedCredentialsFromDiff';
@@ -37,6 +37,7 @@ var isConnectOnly = require('../helpers/isConnectOnly.cjs');
37
37
  require('../../../../context/VerificationContext/VerificationContext.cjs');
38
38
  require('react-dom');
39
39
  require('../../../../context/WalletContext/WalletContext.cjs');
40
+ require('../../../../context/UserWalletsContext/UserWalletsContext.cjs');
40
41
  require('../../useEmbeddedWallet/useSecureEnclaveEmbeddedWallet/constants.cjs');
41
42
  require('../../../../context/ThemeContext/ThemeContext.cjs');
42
43
  require('../../useUserUpdateRequest/useUpdateUser/userFieldsSchema.cjs');
@@ -52,7 +53,6 @@ require('../../../../context/UserFieldEditorContext/UserFieldEditorContext.cjs')
52
53
  require('@dynamic-labs/rpc-providers');
53
54
  require('../../../../store/state/environmentId.cjs');
54
55
  require('../../../../store/state/walletConnectorOptions.cjs');
55
- require('../../../../context/UserWalletsContext/UserWalletsContext.cjs');
56
56
  require('react-i18next');
57
57
  require('../../../../components/Accordion/components/AccordionItem/AccordionItem.cjs');
58
58
  require('../../../../components/Alert/Alert.cjs');
@@ -33,6 +33,7 @@ import { isConnectOnly } from '../helpers/isConnectOnly.js';
33
33
  import '../../../../context/VerificationContext/VerificationContext.js';
34
34
  import 'react-dom';
35
35
  import '../../../../context/WalletContext/WalletContext.js';
36
+ import '../../../../context/UserWalletsContext/UserWalletsContext.js';
36
37
  import '../../useEmbeddedWallet/useSecureEnclaveEmbeddedWallet/constants.js';
37
38
  import '../../../../context/ThemeContext/ThemeContext.js';
38
39
  import '../../useUserUpdateRequest/useUpdateUser/userFieldsSchema.js';
@@ -48,7 +49,6 @@ import '../../../../context/UserFieldEditorContext/UserFieldEditorContext.js';
48
49
  import '@dynamic-labs/rpc-providers';
49
50
  import '../../../../store/state/environmentId.js';
50
51
  import '../../../../store/state/walletConnectorOptions.js';
51
- import '../../../../context/UserWalletsContext/UserWalletsContext.js';
52
52
  import 'react-i18next';
53
53
  import '../../../../components/Accordion/components/AccordionItem/AccordionItem.js';
54
54
  import '../../../../components/Alert/Alert.js';
@@ -37,6 +37,7 @@ var isConnectOnly = require('../helpers/isConnectOnly.cjs');
37
37
  require('../../../../context/VerificationContext/VerificationContext.cjs');
38
38
  require('react-dom');
39
39
  require('../../../../context/WalletContext/WalletContext.cjs');
40
+ require('../../../../context/UserWalletsContext/UserWalletsContext.cjs');
40
41
  require('../../useEmbeddedWallet/useSecureEnclaveEmbeddedWallet/constants.cjs');
41
42
  require('../../../../context/ThemeContext/ThemeContext.cjs');
42
43
  require('../../useUserUpdateRequest/useUpdateUser/userFieldsSchema.cjs');
@@ -52,7 +53,6 @@ require('../../../../context/UserFieldEditorContext/UserFieldEditorContext.cjs')
52
53
  require('@dynamic-labs/rpc-providers');
53
54
  require('../../../../store/state/environmentId.cjs');
54
55
  require('../../../../store/state/walletConnectorOptions.cjs');
55
- require('../../../../context/UserWalletsContext/UserWalletsContext.cjs');
56
56
  require('react-i18next');
57
57
  require('../../../../components/Accordion/components/AccordionItem/AccordionItem.cjs');
58
58
  require('../../../../components/Alert/Alert.cjs');
@@ -33,6 +33,7 @@ import { isConnectOnly } from '../helpers/isConnectOnly.js';
33
33
  import '../../../../context/VerificationContext/VerificationContext.js';
34
34
  import 'react-dom';
35
35
  import '../../../../context/WalletContext/WalletContext.js';
36
+ import '../../../../context/UserWalletsContext/UserWalletsContext.js';
36
37
  import '../../useEmbeddedWallet/useSecureEnclaveEmbeddedWallet/constants.js';
37
38
  import '../../../../context/ThemeContext/ThemeContext.js';
38
39
  import '../../useUserUpdateRequest/useUpdateUser/userFieldsSchema.js';
@@ -48,7 +49,6 @@ import '../../../../context/UserFieldEditorContext/UserFieldEditorContext.js';
48
49
  import '@dynamic-labs/rpc-providers';
49
50
  import '../../../../store/state/environmentId.js';
50
51
  import '../../../../store/state/walletConnectorOptions.js';
51
- import '../../../../context/UserWalletsContext/UserWalletsContext.js';
52
52
  import 'react-i18next';
53
53
  import '../../../../components/Accordion/components/AccordionItem/AccordionItem.js';
54
54
  import '../../../../components/Alert/Alert.js';
@@ -31,6 +31,7 @@ var useVerifyWallet = require('../../useVerifyWallet/useVerifyWallet.cjs');
31
31
  require('../../../../context/VerificationContext/VerificationContext.cjs');
32
32
  require('react-dom');
33
33
  require('../../../../context/WalletContext/WalletContext.cjs');
34
+ require('../../../../context/UserWalletsContext/UserWalletsContext.cjs');
34
35
  require('../../useEmbeddedWallet/useSecureEnclaveEmbeddedWallet/constants.cjs');
35
36
  require('../../../../context/ThemeContext/ThemeContext.cjs');
36
37
  require('../../useUserUpdateRequest/useUpdateUser/userFieldsSchema.cjs');
@@ -46,7 +47,6 @@ require('../../../../context/UserFieldEditorContext/UserFieldEditorContext.cjs')
46
47
  require('@dynamic-labs/rpc-providers');
47
48
  require('../../../../store/state/environmentId.cjs');
48
49
  require('../../../../store/state/walletConnectorOptions.cjs');
49
- require('../../../../context/UserWalletsContext/UserWalletsContext.cjs');
50
50
  require('react-i18next');
51
51
  require('../../../../components/Accordion/components/AccordionItem/AccordionItem.cjs');
52
52
  require('../../../../components/Alert/Alert.cjs');
@@ -27,6 +27,7 @@ import { useVerifyWallet } from '../../useVerifyWallet/useVerifyWallet.js';
27
27
  import '../../../../context/VerificationContext/VerificationContext.js';
28
28
  import 'react-dom';
29
29
  import '../../../../context/WalletContext/WalletContext.js';
30
+ import '../../../../context/UserWalletsContext/UserWalletsContext.js';
30
31
  import '../../useEmbeddedWallet/useSecureEnclaveEmbeddedWallet/constants.js';
31
32
  import '../../../../context/ThemeContext/ThemeContext.js';
32
33
  import '../../useUserUpdateRequest/useUpdateUser/userFieldsSchema.js';
@@ -42,7 +43,6 @@ import '../../../../context/UserFieldEditorContext/UserFieldEditorContext.js';
42
43
  import '@dynamic-labs/rpc-providers';
43
44
  import '../../../../store/state/environmentId.js';
44
45
  import '../../../../store/state/walletConnectorOptions.js';
45
- import '../../../../context/UserWalletsContext/UserWalletsContext.js';
46
46
  import 'react-i18next';
47
47
  import '../../../../components/Accordion/components/AccordionItem/AccordionItem.js';
48
48
  import '../../../../components/Alert/Alert.js';
@@ -66,3 +66,4 @@ export { useSyncMfaFlow } from './useSyncMfaFlow';
66
66
  export * from './useSmartWallets';
67
67
  export { useEmbeddedWalletSessionKeys } from './useEmbeddedWalletSessionKeys';
68
68
  export { useTelegramLogin } from './useTelegramLogin';
69
+ export { useEndUserWarning } from './useEndUserWarning';
@@ -145,6 +145,7 @@ const useAuthLayoutChecks = () => {
145
145
  view.type !== 'wallet-claim-intro' &&
146
146
  view.type !== 'passkey-recovery-add-email' &&
147
147
  view.type !== 'global-wallet-confirm' &&
148
+ view.type !== 'global-wallet-malicious' &&
148
149
  view.type !== 'global-wallet-info' &&
149
150
  view.type !== 'mfa-choose-device' &&
150
151
  view.type !== 'mfa-verification';
@@ -141,6 +141,7 @@ const useAuthLayoutChecks = () => {
141
141
  view.type !== 'wallet-claim-intro' &&
142
142
  view.type !== 'passkey-recovery-add-email' &&
143
143
  view.type !== 'global-wallet-confirm' &&
144
+ view.type !== 'global-wallet-malicious' &&
144
145
  view.type !== 'global-wallet-info' &&
145
146
  view.type !== 'mfa-choose-device' &&
146
147
  view.type !== 'mfa-verification';
@@ -40,7 +40,7 @@ var getEmbeddedWalletSessionExpiration = require('../../../functions/getEmbedded
40
40
  require('../../../../store/state/projectSettings/projectSettings.cjs');
41
41
  require('../../../../context/AccessDeniedContext/AccessDeniedContext.cjs');
42
42
  require('../../../../context/AccountExistsContext/AccountExistsContext.cjs');
43
- require('../../../../context/UserWalletsContext/UserWalletsContext.cjs');
43
+ var UserWalletsContext = require('../../../../context/UserWalletsContext/UserWalletsContext.cjs');
44
44
  var errors = require('../../../constants/errors.cjs');
45
45
  require('../../../../context/VerificationContext/VerificationContext.cjs');
46
46
  require('react-dom');
@@ -52,6 +52,7 @@ var passkeyRecovery = require('../../../../views/Passkey/utils/passkeyRecovery/p
52
52
  var validateTurnkeyProviderEnabled = require('../../../validations/validateTurnkeyProviderEnabled/validateTurnkeyProviderEnabled.cjs');
53
53
  var usePasskeyRecovery = require('../../usePasskeyRecovery/usePasskeyRecovery.cjs');
54
54
  var useSmartWallets = require('../../useSmartWallets/useSmartWallets.cjs');
55
+ var getNewVerifiedCredentialsFromDiff = require('../../../functions/getNewVerifiedCredentialsFromDiff/getNewVerifiedCredentialsFromDiff.cjs');
55
56
  var constants = require('./constants.cjs');
56
57
  var useTurnkey = require('./useTurnkey/useTurnkey.cjs');
57
58
  require('../../../../context/ThemeContext/ThemeContext.cjs');
@@ -135,6 +136,7 @@ const isConnectorSessionKeyActive = (connector) => {
135
136
  const useSecureEnclaveEmbeddedWallet = () => {
136
137
  var _a, _b, _c, _d;
137
138
  const { projectSettings, primaryWallet, user: user$1, environmentId, walletConnectorOptions, } = useInternalDynamicContext.useInternalDynamicContext();
139
+ const { addedWalletsIds } = UserWalletsContext.useInternalUserWallets();
138
140
  const { createTurnkeyWallet } = useTurnkey.useTurnkey();
139
141
  const { hasRecoveryEmail } = useIsTurnkeyWallet.useIsTurnkeyWallet();
140
142
  const { createRootElement } = useElementById.useElementById();
@@ -207,10 +209,14 @@ const useSecureEnclaveEmbeddedWallet = () => {
207
209
  const signedRequest = yield ((_j = wallet === null || wallet === void 0 ? void 0 : wallet.connector) === null || _j === void 0 ? void 0 : _j.stampCreateWalletAccountRequest({
208
210
  request: requestToStamp,
209
211
  }));
210
- yield embeddedWallets.createEmbeddedWalletAccount({
212
+ const verifiedUser = yield embeddedWallets.createEmbeddedWalletAccount({
211
213
  createEmbeddedWalletAccountRequest: signedRequest,
212
214
  environmentId,
213
215
  });
216
+ const newWalletIds = getNewVerifiedCredentialsFromDiff.getNewVerifiedCredentialsFromDiff(user$1.verifiedCredentials, verifiedUser.user.verifiedCredentials)
217
+ .filter(({ format }) => format === sdkApiCore.JwtVerifiedCredentialFormatEnum.Blockchain)
218
+ .map(({ id }) => id);
219
+ addedWalletsIds.current = addedWalletsIds.current.concat(newWalletIds);
214
220
  return user.refreshUserJwt({ environmentId });
215
221
  }), [
216
222
  environmentId,
@@ -219,6 +225,7 @@ const useSecureEnclaveEmbeddedWallet = () => {
219
225
  projectSettings,
220
226
  shouldInitRecovery,
221
227
  user$1,
228
+ addedWalletsIds,
222
229
  ]);
223
230
  /**
224
231
  * Creates or restores a secure enclave embedded wallet session
@@ -36,7 +36,7 @@ import { getEmbeddedWalletSessionExpiration } from '../../../functions/getEmbedd
36
36
  import '../../../../store/state/projectSettings/projectSettings.js';
37
37
  import '../../../../context/AccessDeniedContext/AccessDeniedContext.js';
38
38
  import '../../../../context/AccountExistsContext/AccountExistsContext.js';
39
- import '../../../../context/UserWalletsContext/UserWalletsContext.js';
39
+ import { useInternalUserWallets } from '../../../../context/UserWalletsContext/UserWalletsContext.js';
40
40
  import { USER_NOT_LOGGED_IN, ACTIVE_SESSION, SESSION_RESTORED, INVALID_REQUEST, INVALID_WALLET_DATA, SESSION_CREATED, ERROR_SENDING_CODE, CODE_SENT } from '../../../constants/errors.js';
41
41
  import '../../../../context/VerificationContext/VerificationContext.js';
42
42
  import 'react-dom';
@@ -48,6 +48,7 @@ import { canRestoreEmbeddedWalletSession, restoreEmbeddedWalletSession } from '.
48
48
  import { validateTurnkeyProviderEnabled } from '../../../validations/validateTurnkeyProviderEnabled/validateTurnkeyProviderEnabled.js';
49
49
  import { usePasskeyRecovery } from '../../usePasskeyRecovery/usePasskeyRecovery.js';
50
50
  import { useSmartWallets } from '../../useSmartWallets/useSmartWallets.js';
51
+ import { getNewVerifiedCredentialsFromDiff } from '../../../functions/getNewVerifiedCredentialsFromDiff/getNewVerifiedCredentialsFromDiff.js';
51
52
  import { EmbeddedWalletVersion, iframeContainerId, iframeElementId, revealIframeElementId, revealIframeContainerId } from './constants.js';
52
53
  import { useTurnkey } from './useTurnkey/useTurnkey.js';
53
54
  import '../../../../context/ThemeContext/ThemeContext.js';
@@ -131,6 +132,7 @@ const isConnectorSessionKeyActive = (connector) => {
131
132
  const useSecureEnclaveEmbeddedWallet = () => {
132
133
  var _a, _b, _c, _d;
133
134
  const { projectSettings, primaryWallet, user, environmentId, walletConnectorOptions, } = useInternalDynamicContext();
135
+ const { addedWalletsIds } = useInternalUserWallets();
134
136
  const { createTurnkeyWallet } = useTurnkey();
135
137
  const { hasRecoveryEmail } = useIsTurnkeyWallet();
136
138
  const { createRootElement } = useElementById();
@@ -203,10 +205,14 @@ const useSecureEnclaveEmbeddedWallet = () => {
203
205
  const signedRequest = yield ((_j = wallet === null || wallet === void 0 ? void 0 : wallet.connector) === null || _j === void 0 ? void 0 : _j.stampCreateWalletAccountRequest({
204
206
  request: requestToStamp,
205
207
  }));
206
- yield createEmbeddedWalletAccount({
208
+ const verifiedUser = yield createEmbeddedWalletAccount({
207
209
  createEmbeddedWalletAccountRequest: signedRequest,
208
210
  environmentId,
209
211
  });
212
+ const newWalletIds = getNewVerifiedCredentialsFromDiff(user.verifiedCredentials, verifiedUser.user.verifiedCredentials)
213
+ .filter(({ format }) => format === JwtVerifiedCredentialFormatEnum.Blockchain)
214
+ .map(({ id }) => id);
215
+ addedWalletsIds.current = addedWalletsIds.current.concat(newWalletIds);
210
216
  return refreshUserJwt({ environmentId });
211
217
  }), [
212
218
  environmentId,
@@ -215,6 +221,7 @@ const useSecureEnclaveEmbeddedWallet = () => {
215
221
  projectSettings,
216
222
  shouldInitRecovery,
217
223
  user,
224
+ addedWalletsIds,
218
225
  ]);
219
226
  /**
220
227
  * Creates or restores a secure enclave embedded wallet session
@@ -41,13 +41,26 @@ const p256Keygen = () => _tslib.__awaiter(void 0, void 0, void 0, function* () {
41
41
  const compressedPublicKeyBuffer = compressRawPublicKey(rawPublicKey);
42
42
  const privateKeyBuffer = base64urlDecode(privateKeyJwk.d);
43
43
  return {
44
- private: buf2hex(privateKeyBuffer),
44
+ private: buf2hex(privateKeyBuffer), // format for Turnkey API key stamper
45
+ privateJwk: privateKeyJwk, // format required for use in signing redcoast signatures
45
46
  public: buf2hex(compressedPublicKeyBuffer),
46
- public_uncompressed: buf2hex(rawPublicKey),
47
+ publicUncompressed: buf2hex(rawPublicKey),
47
48
  };
48
49
  });
50
+ const p256Sign = (privateKeyJwk, message) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
51
+ const privateKey = yield crypto.subtle.importKey('jwk', privateKeyJwk, {
52
+ name: 'ECDSA',
53
+ namedCurve: 'P-256',
54
+ }, false, ['sign']);
55
+ const signature = yield crypto.subtle.sign({
56
+ hash: 'SHA-256',
57
+ name: 'ECDSA',
58
+ }, privateKey, new TextEncoder().encode(message));
59
+ return buf2hex(signature);
60
+ });
49
61
 
50
62
  exports.base64urlDecode = base64urlDecode;
51
63
  exports.buf2hex = buf2hex;
52
64
  exports.compressRawPublicKey = compressRawPublicKey;
53
65
  exports.p256Keygen = p256Keygen;
66
+ exports.p256Sign = p256Sign;
@@ -3,6 +3,8 @@ export declare const base64urlDecode: (s?: string) => Uint8Array;
3
3
  export declare const compressRawPublicKey: (rawPublicKey: ArrayBuffer) => ArrayBufferLike;
4
4
  export declare const p256Keygen: () => Promise<{
5
5
  private: string;
6
+ privateJwk: JsonWebKey;
6
7
  public: string;
7
- public_uncompressed: string;
8
+ publicUncompressed: string;
8
9
  }>;
10
+ export declare const p256Sign: (privateKeyJwk: JsonWebKey, message: string) => Promise<string>;
@@ -37,10 +37,22 @@ const p256Keygen = () => __awaiter(void 0, void 0, void 0, function* () {
37
37
  const compressedPublicKeyBuffer = compressRawPublicKey(rawPublicKey);
38
38
  const privateKeyBuffer = base64urlDecode(privateKeyJwk.d);
39
39
  return {
40
- private: buf2hex(privateKeyBuffer),
40
+ private: buf2hex(privateKeyBuffer), // format for Turnkey API key stamper
41
+ privateJwk: privateKeyJwk, // format required for use in signing redcoast signatures
41
42
  public: buf2hex(compressedPublicKeyBuffer),
42
- public_uncompressed: buf2hex(rawPublicKey),
43
+ publicUncompressed: buf2hex(rawPublicKey),
43
44
  };
44
45
  });
46
+ const p256Sign = (privateKeyJwk, message) => __awaiter(void 0, void 0, void 0, function* () {
47
+ const privateKey = yield crypto.subtle.importKey('jwk', privateKeyJwk, {
48
+ name: 'ECDSA',
49
+ namedCurve: 'P-256',
50
+ }, false, ['sign']);
51
+ const signature = yield crypto.subtle.sign({
52
+ hash: 'SHA-256',
53
+ name: 'ECDSA',
54
+ }, privateKey, new TextEncoder().encode(message));
55
+ return buf2hex(signature);
56
+ });
45
57
 
46
- export { base64urlDecode, buf2hex, compressRawPublicKey, p256Keygen };
58
+ export { base64urlDecode, buf2hex, compressRawPublicKey, p256Keygen, p256Sign };
@@ -6,9 +6,9 @@ Object.defineProperty(exports, '__esModule', { value: true });
6
6
  var _tslib = require('../../../../../_virtual/_tslib.cjs');
7
7
  var React = require('react');
8
8
  var utils = require('@dynamic-labs/utils');
9
- var sessionStorage = require('../../constants/sessionStorage.cjs');
9
+ var sdkApiCore = require('@dynamic-labs/sdk-api-core');
10
+ var localStorage = require('../../constants/localStorage.cjs');
10
11
  var utils$1 = require('../useEmbeddedWallet/useSecureEnclaveEmbeddedWallet/utils.cjs');
11
- require('@dynamic-labs/sdk-api-core');
12
12
  require('../../../shared/logger.cjs');
13
13
  require('@dynamic-labs/iconic');
14
14
  require('@dynamic-labs/wallet-connector-core');
@@ -24,39 +24,95 @@ require('@dynamic-labs/multi-wallet');
24
24
  require('react-international-phone');
25
25
  require('../../../store/state/projectSettings/projectSettings.cjs');
26
26
  var embeddedWallets = require('../../../data/api/embeddedWallets/embeddedWallets.cjs');
27
- require('../../../store/state/user/user.cjs');
27
+ var user = require('../../../store/state/user/user.cjs');
28
28
  require('../../../locale/locale.cjs');
29
+ var dynamicEvents = require('../../../events/dynamicEvents.cjs');
29
30
 
30
- const useEmbeddedWalletSessionKeys = (environmentId) => {
31
+ const useEmbeddedWalletSessionKeys = ({ environmentId, projectSettings, }) => {
32
+ const { user: user$1 } = user.useUser();
33
+ // scenario 1: first time session register on first transaction.
34
+ // Keys will have been previously generated at this point in local storage but marked as not registered
35
+ // scenario 2: 2nd time register after expiration (key refresh)
36
+ // scenario 3: refresh/rerender page - session still active
37
+ // scenario 4: refresh/rerender page - session no longer active
31
38
  const registerEmbeddedWalletSessionKey = (...args_1) => _tslib.__awaiter(void 0, [...args_1], void 0, function* ({ ignoreRestore = false, } = {}) {
32
39
  // check if session keys are already stored in session storage
33
- const sessionKeysSS = utils.StorageService.getItem(sessionStorage.SECURE_ENCLAVE_WALLET_SESSION_KEYS, sessionStorage.SECURE_ENCLAVE_WALLET_SESSION_KEYS_STORAGE_OPTIONS);
34
- if (sessionKeysSS && !ignoreRestore) {
35
- const sessionKeysInSS = JSON.parse(Buffer.from(sessionKeysSS, 'base64').toString());
36
- return sessionKeysInSS;
40
+ const sessionKeysSS = utils.StorageService.getItem(localStorage.SECURE_ENCLAVE_WALLET_SESSION_KEYS, localStorage.SECURE_ENCLAVE_WALLET_SESSION_KEYS_STORAGE_OPTIONS);
41
+ const decodedSessionKeys = sessionKeysSS
42
+ ? JSON.parse(Buffer.from(sessionKeysSS, 'base64').toString())
43
+ : undefined;
44
+ if (!decodedSessionKeys) {
45
+ dynamicEvents.dynamicEvents.emit('triggerLogout');
46
+ throw new Error('Could not find session keys. Re-authentication is required to create new session keys.');
37
47
  }
38
- const { publicKey, privateKey } = yield generateSessionKey();
39
- yield embeddedWallets.registerSessionKey({
40
- environmentId,
41
- publicKey,
42
- });
43
- return { privateKey, publicKey };
48
+ if (!user$1) {
49
+ throw new Error('User not found');
50
+ }
51
+ if (decodedSessionKeys.expirationDate &&
52
+ new Date() <= new Date(decodedSessionKeys.expirationDate) &&
53
+ !ignoreRestore) {
54
+ // scenario 3
55
+ return decodedSessionKeys;
56
+ }
57
+ let publicKey;
58
+ let privateKey;
59
+ let privateKeyJwk;
60
+ let prevSessionKeySignature = undefined;
61
+ if (!decodedSessionKeys.registered) {
62
+ // scenario 1
63
+ ({ publicKey, privateKey, privateKeyJwk } = decodedSessionKeys);
64
+ }
65
+ else {
66
+ // scenario 2 and 4
67
+ const { publicKey: nextPublicKey, privateKey: nextPrivateKey, privateKeyJwk: nextPrivateKeyJwk, } = yield generateSessionKey();
68
+ publicKey = nextPublicKey;
69
+ privateKey = nextPrivateKey;
70
+ privateKeyJwk = nextPrivateKeyJwk;
71
+ prevSessionKeySignature = yield utils$1.p256Sign(decodedSessionKeys.privateKeyJwk, user$1.sessionId);
72
+ }
73
+ let resp;
74
+ try {
75
+ resp = yield embeddedWallets.registerSessionKey({
76
+ environmentId,
77
+ prevSessionKeySignature,
78
+ publicKey,
79
+ });
80
+ }
81
+ catch (error) {
82
+ if (error instanceof utils.InvalidEmbeddedWalletSessionKeyError) {
83
+ // this can happen if the public key passed during initial registration
84
+ // does not match the root session public key that the backend expects
85
+ dynamicEvents.dynamicEvents.emit('triggerLogout');
86
+ }
87
+ throw error;
88
+ }
89
+ const expirationDate = new Date(resp.expiresAt * 1000);
90
+ utils.StorageService.setItem(localStorage.SECURE_ENCLAVE_WALLET_SESSION_KEYS, toEncodedFormat(publicKey, privateKey, privateKeyJwk, true, expirationDate), localStorage.SECURE_ENCLAVE_WALLET_SESSION_KEYS_STORAGE_OPTIONS);
91
+ return { expirationDate, privateKey, publicKey };
44
92
  });
45
93
  const generateSessionKey = () => _tslib.__awaiter(void 0, void 0, void 0, function* () {
46
- const { private: privateKey, public: publicKey } = yield utils$1.p256Keygen();
94
+ const { private: privateKey, public: publicKey, privateJwk, } = yield utils$1.p256Keygen();
47
95
  // convert to base64 and store the session keys in session storage
48
- const newSessionKeys = { privateKey, publicKey };
49
- const sessionKeysString = JSON.stringify(newSessionKeys);
50
- const sessionKeysBase64 = Buffer.from(sessionKeysString).toString('base64');
51
- utils.StorageService.setItem(sessionStorage.SECURE_ENCLAVE_WALLET_SESSION_KEYS, sessionKeysBase64, sessionStorage.SECURE_ENCLAVE_WALLET_SESSION_KEYS_STORAGE_OPTIONS);
52
- return { privateKey, publicKey };
96
+ utils.StorageService.setItem(localStorage.SECURE_ENCLAVE_WALLET_SESSION_KEYS, toEncodedFormat(publicKey, privateKey, privateJwk, false), localStorage.SECURE_ENCLAVE_WALLET_SESSION_KEYS_STORAGE_OPTIONS);
97
+ return { privateKey, privateKeyJwk: privateJwk, publicKey };
53
98
  });
54
- const removeSessionKey = React.useCallback(() => utils.StorageService.removeItem(sessionStorage.SECURE_ENCLAVE_WALLET_SESSION_KEYS, sessionStorage.SECURE_ENCLAVE_WALLET_SESSION_KEYS_STORAGE_OPTIONS), []);
55
- const shouldRegisterSessionKeysOnSignin = () => false;
56
- // TODO: uncomment this once we actually implement and enforce session key chaining
57
- // GVTY-2206
58
- // projectSettings?.sdk?.embeddedWallets?.defaultWalletVersion ===
59
- // EmbeddedWalletVersionEnum.V2;
99
+ const shouldRegisterSessionKeysOnSignin = () => {
100
+ var _a;
101
+ return ((_a = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.sdk.embeddedWallets) === null || _a === void 0 ? void 0 : _a.defaultWalletVersion) ===
102
+ sdkApiCore.EmbeddedWalletVersionEnum.V2;
103
+ };
104
+ const toEncodedFormat = (publicKey, privateKey, privateKeyJwk, registered, expirationDate) => {
105
+ const sessionKeys = {
106
+ expirationDate,
107
+ privateKey,
108
+ privateKeyJwk,
109
+ publicKey,
110
+ registered,
111
+ };
112
+ const sessionKeysString = JSON.stringify(sessionKeys);
113
+ return Buffer.from(sessionKeysString).toString('base64');
114
+ };
115
+ const removeSessionKey = React.useCallback(() => utils.StorageService.removeItem(localStorage.SECURE_ENCLAVE_WALLET_SESSION_KEYS, localStorage.SECURE_ENCLAVE_WALLET_SESSION_KEYS_STORAGE_OPTIONS), []);
60
116
  return {
61
117
  generateSessionKey,
62
118
  registerEmbeddedWalletSessionKey,
@@ -1,11 +1,28 @@
1
- export declare const useEmbeddedWalletSessionKeys: (environmentId: string) => {
1
+ import { ProjectSettings } from '@dynamic-labs/sdk-api-core';
2
+ type SessionKey = {
3
+ publicKey: string;
4
+ privateKey: string;
5
+ privateKeyJwk: JsonWebKey;
6
+ registered: boolean;
7
+ expirationDate?: Date;
8
+ };
9
+ export declare const useEmbeddedWalletSessionKeys: ({ environmentId, projectSettings, }: {
10
+ environmentId: string;
11
+ projectSettings?: ProjectSettings;
12
+ }) => {
2
13
  generateSessionKey: () => Promise<{
3
14
  privateKey: string;
15
+ privateKeyJwk: JsonWebKey;
4
16
  publicKey: string;
5
17
  }>;
6
18
  registerEmbeddedWalletSessionKey: ({ ignoreRestore, }?: {
7
19
  ignoreRestore?: boolean;
8
- }) => Promise<any>;
20
+ }) => Promise<SessionKey | {
21
+ expirationDate: Date;
22
+ privateKey: string;
23
+ publicKey: string;
24
+ }>;
9
25
  removeSessionKey: () => void;
10
26
  shouldRegisterSessionKeysOnSignin: () => boolean;
11
27
  };
28
+ export {};