@dynamic-labs/sdk-react-core 0.19.0-alpha.7 → 0.19.0-alpha.8

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 (169) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/package.cjs +3 -3
  3. package/package.js +3 -3
  4. package/package.json +10 -10
  5. package/src/index.d.ts +1 -1
  6. package/src/lib/Main.cjs +1 -0
  7. package/src/lib/Main.js +1 -0
  8. package/src/lib/components/AuthProviderIcon/AuthProviderIcon.cjs +2 -2
  9. package/src/lib/components/AuthProviderIcon/AuthProviderIcon.js +2 -2
  10. package/src/lib/components/IconWithStatus/IconWithStatus.cjs +3 -3
  11. package/src/lib/components/IconWithStatus/IconWithStatus.d.ts +2 -2
  12. package/src/lib/components/IconWithStatus/IconWithStatus.js +3 -3
  13. package/src/lib/components/MockedQrCode/MockedQrCode.cjs +1 -1
  14. package/src/lib/components/MockedQrCode/MockedQrCode.js +1 -1
  15. package/src/lib/components/SendBalancePageLayout/SendBalancePageLayout.cjs +2 -2
  16. package/src/lib/components/SendBalancePageLayout/SendBalancePageLayout.d.ts +1 -1
  17. package/src/lib/components/SendBalancePageLayout/SendBalancePageLayout.js +2 -2
  18. package/src/lib/components/SocialSignIn/SocialSignIn.cjs +26 -14
  19. package/src/lib/components/SocialSignIn/SocialSignIn.d.ts +8 -7
  20. package/src/lib/components/SocialSignIn/SocialSignIn.js +26 -14
  21. package/src/lib/components/TransactionOriginDestination/TransactionOriginDestination.d.ts +1 -1
  22. package/src/lib/components/UserProfile/UserProfile.cjs +4 -1
  23. package/src/lib/components/UserProfile/UserProfile.js +4 -1
  24. package/src/lib/components/UserProfile/parts/UserProfileSocialAccount/UserProfileSocialAccount.cjs +15 -13
  25. package/src/lib/components/UserProfile/parts/UserProfileSocialAccount/UserProfileSocialAccount.js +15 -13
  26. package/src/lib/context/DynamicContext/helpers.cjs +22 -10
  27. package/src/lib/context/DynamicContext/helpers.d.ts +4 -2
  28. package/src/lib/context/DynamicContext/helpers.js +20 -10
  29. package/src/lib/context/ErrorContext/ErrorContext.cjs +4 -1
  30. package/src/lib/context/ErrorContext/ErrorContext.js +4 -1
  31. package/src/lib/context/SocialRedirectContext/SocialRedirectContext.cjs +7 -4
  32. package/src/lib/context/SocialRedirectContext/SocialRedirectContext.d.ts +5 -5
  33. package/src/lib/context/SocialRedirectContext/SocialRedirectContext.js +7 -4
  34. package/src/lib/data/api.cjs +48 -16
  35. package/src/lib/data/api.d.ts +1 -0
  36. package/src/lib/data/api.js +50 -19
  37. package/src/lib/layout/DynamicAuthLayout/HelpContent/WalletListHelpContent/WalletListHelpContent.cjs +1 -1
  38. package/src/lib/layout/DynamicAuthLayout/HelpContent/WalletListHelpContent/WalletListHelpContent.js +1 -1
  39. package/src/lib/locale/en/translation.cjs +2 -4
  40. package/src/lib/locale/en/translation.js +2 -4
  41. package/src/lib/shared/types/index.d.ts +4 -0
  42. package/src/lib/shared/utils/functions/wallet/createWallet.cjs +1 -1
  43. package/src/lib/shared/utils/functions/wallet/createWallet.js +1 -1
  44. package/src/lib/styles/index.shadow.cjs +1 -1
  45. package/src/lib/styles/index.shadow.js +1 -1
  46. package/src/lib/utils/constants/localStorage.cjs +4 -2
  47. package/src/lib/utils/constants/localStorage.d.ts +2 -1
  48. package/src/lib/utils/constants/localStorage.js +3 -2
  49. package/src/lib/utils/functions/getActiveOauthCredential/getActiveOauthCredential.cjs +11 -0
  50. package/src/lib/utils/functions/getActiveOauthCredential/getActiveOauthCredential.d.ts +2 -0
  51. package/src/lib/utils/functions/getActiveOauthCredential/getActiveOauthCredential.js +7 -0
  52. package/src/lib/utils/functions/getActiveOauthCredential/index.d.ts +1 -0
  53. package/src/lib/utils/functions/getEnabledSocialSignInProvidersAsProviderEnum/getEnabledSocialSignInProvidersAsProviderEnum.d.ts +2 -0
  54. package/src/lib/utils/functions/getEnabledSocialSignInProvidersAsProviderEnum/index.d.ts +1 -0
  55. package/src/lib/utils/functions/getProviderEnumForSocialSignInProvider/getProviderEnumForSocialSignInProvider.cjs +19 -0
  56. package/src/lib/utils/functions/getProviderEnumForSocialSignInProvider/getProviderEnumForSocialSignInProvider.d.ts +2 -0
  57. package/src/lib/utils/functions/getProviderEnumForSocialSignInProvider/getProviderEnumForSocialSignInProvider.js +15 -0
  58. package/src/lib/utils/functions/getProviderEnumForSocialSignInProvider/index.d.ts +1 -0
  59. package/src/lib/utils/functions/getSocialSignInProviderForProviderEnum/getSocialSignInProviderForProviderEnum.cjs +19 -0
  60. package/src/lib/utils/functions/getSocialSignInProviderForProviderEnum/getSocialSignInProviderForProviderEnum.d.ts +2 -0
  61. package/src/lib/utils/functions/getSocialSignInProviderForProviderEnum/getSocialSignInProviderForProviderEnum.js +15 -0
  62. package/src/lib/utils/functions/getSocialSignInProviderForProviderEnum/index.d.ts +1 -0
  63. package/src/lib/utils/functions/getSocialSignInProviderFromString/getSocialSignInProviderFromString.cjs +19 -0
  64. package/src/lib/utils/functions/getSocialSignInProviderFromString/getSocialSignInProviderFromString.d.ts +2 -0
  65. package/src/lib/utils/functions/getSocialSignInProviderFromString/getSocialSignInProviderFromString.js +15 -0
  66. package/src/lib/utils/functions/getSocialSignInProviderFromString/index.d.ts +1 -0
  67. package/src/lib/utils/functions/index.d.ts +5 -0
  68. package/src/lib/utils/hooks/useAuthLayoutChecks/useAuthLayoutChecks.cjs +2 -1
  69. package/src/lib/utils/hooks/useAuthLayoutChecks/useAuthLayoutChecks.js +2 -1
  70. package/src/lib/utils/hooks/useConnectWallet/useConnectWallet.cjs +3 -3
  71. package/src/lib/utils/hooks/useConnectWallet/useConnectWallet.js +4 -4
  72. package/src/lib/utils/hooks/useFetchProjectSettings/useFetchProjectSettings.cjs +10 -1
  73. package/src/lib/utils/hooks/useFetchProjectSettings/useFetchProjectSettings.js +10 -1
  74. package/src/lib/utils/hooks/useSocialAccounts/useSocialAccounts.cjs +10 -164
  75. package/src/lib/utils/hooks/useSocialAccounts/useSocialAccounts.d.ts +2 -2
  76. package/src/lib/utils/hooks/useSocialAccounts/useSocialAccounts.js +12 -166
  77. package/src/lib/utils/hooks/useSocialAuth/index.d.ts +1 -0
  78. package/src/lib/utils/hooks/useSocialAuth/useSocialAuth.cjs +278 -0
  79. package/src/lib/utils/hooks/useSocialAuth/useSocialAuth.d.ts +20 -0
  80. package/src/lib/utils/hooks/useSocialAuth/useSocialAuth.js +274 -0
  81. package/src/lib/utils/hooks/useVerifyWallet/useVerifyWallet.cjs +13 -3
  82. package/src/lib/utils/hooks/useVerifyWallet/useVerifyWallet.js +13 -3
  83. package/src/lib/views/AccountExistsView/AccountExistsView.cjs +4 -2
  84. package/src/lib/views/AccountExistsView/AccountExistsView.js +4 -2
  85. package/src/lib/views/BridgeSummaryView/BridgeSummaryView.cjs +1 -1
  86. package/src/lib/views/BridgeSummaryView/BridgeSummaryView.js +1 -1
  87. package/src/lib/views/LoginView/LoginView.cjs +1 -1
  88. package/src/lib/views/LoginView/LoginView.js +1 -1
  89. package/src/lib/views/LoginView/sections/LoginWidget.d.ts +5 -0
  90. package/src/lib/views/LoginView/sections/SocialSignInSection/DynamicSocialSignIn/DynamicSocialSignIn.cjs +77 -0
  91. package/src/lib/views/LoginView/sections/SocialSignInSection/DynamicSocialSignIn/DynamicSocialSignIn.d.ts +3 -0
  92. package/src/lib/views/LoginView/sections/SocialSignInSection/DynamicSocialSignIn/DynamicSocialSignIn.js +73 -0
  93. package/src/lib/views/LoginView/sections/SocialSignInSection/DynamicSocialSignIn/index.d.ts +1 -0
  94. package/src/lib/views/LoginView/sections/SocialSignInSection/MagicSocialSignIn/MagicSocialSignIn.cjs +3 -2
  95. package/src/lib/views/LoginView/sections/SocialSignInSection/MagicSocialSignIn/MagicSocialSignIn.d.ts +2 -1
  96. package/src/lib/views/LoginView/sections/SocialSignInSection/MagicSocialSignIn/MagicSocialSignIn.js +3 -2
  97. package/src/lib/views/LoginView/sections/SocialSignInSection/SocialSignInSection.cjs +18 -4
  98. package/src/lib/views/LoginView/sections/SocialSignInSection/SocialSignInSection.d.ts +6 -1
  99. package/src/lib/views/LoginView/sections/SocialSignInSection/SocialSignInSection.js +18 -4
  100. package/src/lib/views/LoginView/sections/WalletSignInSection/WalletSignInSection.cjs +3 -2
  101. package/src/lib/views/LoginView/sections/WalletSignInSection/WalletSignInSection.js +3 -2
  102. package/src/lib/views/LoginView/useLoginView.cjs +9 -10
  103. package/src/lib/views/LoginView/useLoginView.js +9 -10
  104. package/src/lib/views/MergeUserAccountsView/MergeUserAccountsView.cjs +1 -1
  105. package/src/lib/views/MergeUserAccountsView/MergeUserAccountsView.js +1 -1
  106. package/src/lib/views/NetworkNotSupported/NetworkNotSupported.cjs +1 -1
  107. package/src/lib/views/NetworkNotSupported/NetworkNotSupported.js +1 -1
  108. package/src/lib/views/NetworkNotSupportedSwitchManual/NetworkNotSupportedSwitchManual.cjs +1 -1
  109. package/src/lib/views/NetworkNotSupportedSwitchManual/NetworkNotSupportedSwitchManual.js +1 -1
  110. package/src/lib/views/NoQrNotInstalledView/NoQrNotInstalledView.cjs +2 -2
  111. package/src/lib/views/NoQrNotInstalledView/NoQrNotInstalledView.js +2 -2
  112. package/src/lib/views/PendingConnectView/PendingConnectView.cjs +1 -1
  113. package/src/lib/views/PendingConnectView/PendingConnectView.js +1 -1
  114. package/src/lib/views/PendingSignatureView/PendingSignatureView.cjs +1 -1
  115. package/src/lib/views/PendingSignatureView/PendingSignatureView.js +1 -1
  116. package/src/lib/views/QrCodeView/QRCode.cjs +3 -3
  117. package/src/lib/views/QrCodeView/QRCode.d.ts +2 -2
  118. package/src/lib/views/QrCodeView/QRCode.js +3 -3
  119. package/src/lib/views/QrCodeView/QrCodeContainer/QrCodeContainer.cjs +2 -2
  120. package/src/lib/views/QrCodeView/QrCodeContainer/QrCodeContainer.d.ts +2 -1
  121. package/src/lib/views/QrCodeView/QrCodeContainer/QrCodeContainer.js +2 -2
  122. package/src/lib/views/QrCodeView/QrCodeView.cjs +2 -2
  123. package/src/lib/views/QrCodeView/QrCodeView.js +2 -2
  124. package/src/lib/views/SendBalanceView/SendBalanceView.cjs +1 -1
  125. package/src/lib/views/SendBalanceView/SendBalanceView.js +1 -1
  126. package/src/lib/views/SocialRedirectView/SocialRedirectView.cjs +4 -6
  127. package/src/lib/views/SocialRedirectView/SocialRedirectView.d.ts +1 -1
  128. package/src/lib/views/SocialRedirectView/SocialRedirectView.js +4 -6
  129. package/src/lib/views/WalletCannotBeTransferredView/WalletCannotBeTransferredView.cjs +1 -1
  130. package/src/lib/views/WalletCannotBeTransferredView/WalletCannotBeTransferredView.js +1 -1
  131. package/src/lib/views/WalletGroupView/WalletGroupView.cjs +1 -1
  132. package/src/lib/views/WalletGroupView/WalletGroupView.js +1 -1
  133. package/src/lib/views/WalletList/WalletListItem/WalletListItem.cjs +2 -2
  134. package/src/lib/views/WalletList/WalletListItem/WalletListItem.js +2 -2
  135. package/src/lib/views/WalletLockedView/WalletLockedView.cjs +1 -1
  136. package/src/lib/views/WalletLockedView/WalletLockedView.js +1 -1
  137. package/src/lib/views/WalletSignSpinnerView/WalletSignSpinnerView.cjs +2 -2
  138. package/src/lib/views/WalletSignSpinnerView/WalletSignSpinnerView.js +2 -2
  139. package/src/lib/views/WalletUsedView/WalletUsedView.cjs +1 -1
  140. package/src/lib/views/WalletUsedView/WalletUsedView.js +1 -1
  141. package/src/lib/widgets/DynamicBridgeWidget/components/DynamicBridgeWalletCardBody/DynamicBridgeWalletCardBody.cjs +2 -2
  142. package/src/lib/widgets/DynamicBridgeWidget/components/DynamicBridgeWalletCardBody/DynamicBridgeWalletCardBody.d.ts +1 -1
  143. package/src/lib/widgets/DynamicBridgeWidget/components/DynamicBridgeWalletCardBody/DynamicBridgeWalletCardBody.js +2 -2
  144. package/src/lib/widgets/DynamicBridgeWidget/views/WalletsView/WalletsView.cjs +1 -1
  145. package/src/lib/widgets/DynamicBridgeWidget/views/WalletsView/WalletsView.js +1 -1
  146. package/src/lib/widgets/DynamicBridgeWidget/views/WalletsView/components/SecondaryWallets/SecondaryWallets.cjs +1 -1
  147. package/src/lib/widgets/DynamicBridgeWidget/views/WalletsView/components/SecondaryWallets/SecondaryWallets.js +1 -1
  148. package/src/lib/widgets/DynamicWidget/components/AccountControl/AccountControl.cjs +18 -3
  149. package/src/lib/widgets/DynamicWidget/components/AccountControl/AccountControl.js +18 -3
  150. package/src/lib/widgets/DynamicWidget/components/DynamicWidgetHeader/DynamicWidgetWalletHeader/DynamicWidgetWalletHeader.cjs +9 -1
  151. package/src/lib/widgets/DynamicWidget/components/DynamicWidgetHeader/DynamicWidgetWalletHeader/DynamicWidgetWalletHeader.d.ts +1 -1
  152. package/src/lib/widgets/DynamicWidget/components/DynamicWidgetHeader/DynamicWidgetWalletHeader/DynamicWidgetWalletHeader.js +9 -1
  153. package/src/lib/widgets/DynamicWidget/components/WalletIconWithStatus/WalletIconWithStatus.cjs +2 -2
  154. package/src/lib/widgets/DynamicWidget/components/WalletIconWithStatus/WalletIconWithStatus.d.ts +2 -2
  155. package/src/lib/widgets/DynamicWidget/components/WalletIconWithStatus/WalletIconWithStatus.js +2 -2
  156. package/src/lib/widgets/DynamicWidget/prompts/NoQrNotInstalledModalView/NoQrNotInstalledModalView.cjs +3 -3
  157. package/src/lib/widgets/DynamicWidget/prompts/NoQrNotInstalledModalView/NoQrNotInstalledModalView.js +3 -3
  158. package/src/lib/widgets/DynamicWidget/prompts/PendingAccountSwitchModal/PendingAccountSwitchModal.cjs +1 -1
  159. package/src/lib/widgets/DynamicWidget/prompts/PendingAccountSwitchModal/PendingAccountSwitchModal.js +1 -1
  160. package/src/lib/widgets/DynamicWidget/prompts/PendingAccountSwitchModal/SwitchOrUseActiveAccountView/SwitchOrUseActiveAccountView.cjs +1 -1
  161. package/src/lib/widgets/DynamicWidget/prompts/PendingAccountSwitchModal/SwitchOrUseActiveAccountView/SwitchOrUseActiveAccountView.js +1 -1
  162. package/src/lib/widgets/DynamicWidget/prompts/PendingAccountSwitchToLinkModal/PendingAccountSwitchToLinkModal.cjs +1 -1
  163. package/src/lib/widgets/DynamicWidget/prompts/PendingAccountSwitchToLinkModal/PendingAccountSwitchToLinkModal.js +1 -1
  164. package/src/lib/widgets/DynamicWidget/prompts/PendingSignModal/DefaultPendingSignModalContent/DefaultPendingSignModalContent.cjs +1 -1
  165. package/src/lib/widgets/DynamicWidget/prompts/PendingSignModal/DefaultPendingSignModalContent/DefaultPendingSignModalContent.js +1 -1
  166. package/src/lib/widgets/DynamicWidget/prompts/PrimaryNotConnectedModal/PrimaryNotConnectedModal.cjs +1 -1
  167. package/src/lib/widgets/DynamicWidget/prompts/PrimaryNotConnectedModal/PrimaryNotConnectedModal.js +1 -1
  168. package/src/lib/widgets/DynamicWidget/prompts/QrCodeModalView/QrCodeModalView.cjs +6 -5
  169. package/src/lib/widgets/DynamicWidget/prompts/QrCodeModalView/QrCodeModalView.js +6 -5
@@ -0,0 +1,278 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var _tslib = require('../../../../../_virtual/_tslib.cjs');
6
+ var React = require('react');
7
+ var types = require('@dynamic-labs/types');
8
+ var utils = require('@dynamic-labs/utils');
9
+ var useInternalDynamicContext = require('../../../context/DynamicContext/useInternalDynamicContext.cjs');
10
+ var api = require('../../../data/api.cjs');
11
+ var useUpdateUserProfileByJWTCallback = require('../useUpdateUserProfileByJWTCallback/useUpdateUserProfileByJWTCallback.cjs');
12
+ var decodeJwt = require('../../../shared/utils/functions/decodeJwt/decodeJwt.cjs');
13
+ require('@dynamic-labs/iconic');
14
+ require('@dynamic-labs/wallet-connector-core');
15
+ require('react/jsx-runtime');
16
+ var ViewContext = require('../../../context/ViewContext/ViewContext.cjs');
17
+ var logger = require('../../../shared/logger.cjs');
18
+ require('@dynamic-labs/wallet-book');
19
+ require('../../constants/colors.cjs');
20
+ require('../../../shared/utils/classes/storage/localStorage.cjs');
21
+ require('ethers');
22
+ require('../../../shared/consts/index.cjs');
23
+ require('@dynamic-labs/multi-wallet');
24
+ var getAuthToken = require('../../functions/getAuthToken/getAuthToken.cjs');
25
+ require('@dynamic-labs/sdk-api');
26
+ var randomString = require('../../functions/randomString/randomString.cjs');
27
+ var stringifyURIQuery = require('../../functions/stringifyURIQuery/stringifyURIQuery.cjs');
28
+ var digestSHA256 = require('../../functions/digestSHA256/digestSHA256.cjs');
29
+ var encodeBase64URL = require('../../functions/encodeBase64URL/encodeBase64URL.cjs');
30
+ var getRedirectURIOrigin = require('../../functions/getRedirectURIOrigin/getRedirectURIOrigin.cjs');
31
+ var useCreateUserProfileByJWTCallback = require('../useCreateUserProfileByJWTCallback/useCreateUserProfileByJWTCallback.cjs');
32
+ var ErrorContext = require('../../../context/ErrorContext/ErrorContext.cjs');
33
+
34
+ const socialProviders = [
35
+ 'discord',
36
+ 'facebook',
37
+ 'github',
38
+ 'google',
39
+ 'instagram',
40
+ 'twitch',
41
+ 'twitter',
42
+ ];
43
+ // pkce params are only required for twitter and break if added for other providers, like google
44
+ // so we should only add provider that support pkce to this list
45
+ const providersRequiringPkce = ['twitter', 'github'];
46
+ const providersWithoutWindowOpenerRefence = ['twitter'];
47
+ // Hook to handle common social auth logic (for social linking and social sign in)
48
+ const useSocialAuth = ({ sessionTimeout, authMode, onSettled, onError, }) => {
49
+ var _a;
50
+ const { environmentId, onboardingOnlyJwt, setOnboardingOnlyJwt, setCallback, setShowAuthFlow, setIsVerificationInProgress, } = useInternalDynamicContext.useInternalDynamicContext();
51
+ const { setView } = ViewContext.useViewContext();
52
+ const { setErrorMessage, setError: setContextError } = ErrorContext.useErrorContext();
53
+ const { updateUserProfileByJWT } = useUpdateUserProfileByJWTCallback.useUpdateUserProfileByJWTCallback();
54
+ const { createUserProfileByJWT } = useCreateUserProfileByJWTCallback.useCreateUserProfileByJWTCallback();
55
+ const [isProcessing, setIsProcessing] = React.useState(false);
56
+ const [error, setError] = React.useState();
57
+ const providersWaitingOauthMessages = React.useRef({});
58
+ const authWindowInterval = React.useRef();
59
+ const userJwt = (_a = getAuthToken.getAuthToken()) !== null && _a !== void 0 ? _a : onboardingOnlyJwt;
60
+ const clearError = () => {
61
+ setError(undefined);
62
+ setContextError(undefined);
63
+ };
64
+ const handleError = (code, message) => {
65
+ logger.logger.error(message);
66
+ setIsProcessing(false);
67
+ setError({ code, message });
68
+ setErrorMessage(code);
69
+ onError === null || onError === void 0 ? void 0 : onError();
70
+ onSettled === null || onSettled === void 0 ? void 0 : onSettled();
71
+ };
72
+ const addOAuthIFrame = (url) => {
73
+ const container = document.getElementById('oauth-iframe-container');
74
+ let oauthIFrame = document.getElementById('oauth-iframe');
75
+ if (!container || oauthIFrame) {
76
+ return;
77
+ }
78
+ oauthIFrame = document.createElement('iframe');
79
+ oauthIFrame.setAttribute('id', 'oauth-iframe');
80
+ oauthIFrame.setAttribute('src', url);
81
+ container.appendChild(oauthIFrame);
82
+ };
83
+ const removeOAuthIFrame = () => {
84
+ const oauthIFrame = document.getElementById('oauth-iframe');
85
+ if (oauthIFrame) {
86
+ oauthIFrame.remove();
87
+ }
88
+ };
89
+ const checkValidProvider = (provider) => {
90
+ if (!provider) {
91
+ handleError(types.SocialOAuthErrorCode.NO_PROVIDER, 'Provider is required');
92
+ return false;
93
+ }
94
+ if (!socialProviders.includes(provider)) {
95
+ handleError(types.SocialOAuthErrorCode.INVALID_PROVIDER, `Invalid social provider. Valid providers are: ${socialProviders.join(', ')}`);
96
+ return false;
97
+ }
98
+ return true;
99
+ };
100
+ const linkAccount = (provider, code, verifier, state) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
101
+ try {
102
+ const jwt = yield api.verifyOAuth(environmentId, provider, {
103
+ code,
104
+ codeVerifier: verifier,
105
+ state,
106
+ }, String(userJwt));
107
+ if (!jwt) {
108
+ handleError(types.SocialOAuthErrorCode.VERIFICATION_ERROR, `Failed to link social account: ${provider}`);
109
+ return;
110
+ }
111
+ yield updateUserProfileByJWT(jwt);
112
+ onSettled === null || onSettled === void 0 ? void 0 : onSettled();
113
+ }
114
+ catch (error) {
115
+ if (error instanceof utils.SocialAccountAlreadyExistsError) {
116
+ handleError(types.SocialOAuthErrorCode.ACCOUNT_ALREADY_LINKED_TO_DIFFERENT_PROFILE, `Social account already linked to a different profile: ${provider}`);
117
+ }
118
+ }
119
+ });
120
+ const signInAccount = (provider, code, verifier, state) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
121
+ try {
122
+ const jwt = yield api.signInOAuth(environmentId, provider, {
123
+ code,
124
+ codeVerifier: verifier,
125
+ state,
126
+ });
127
+ if (!jwt) {
128
+ handleError(types.SocialOAuthErrorCode.SIGNIN_ERROR, `Failed to sign-in with social account: ${provider}`);
129
+ return;
130
+ }
131
+ setIsVerificationInProgress(true);
132
+ const decodedJwt = decodeJwt.decodeJwt(jwt);
133
+ if (decodedJwt === null || decodedJwt === void 0 ? void 0 : decodedJwt.missingFields.length) {
134
+ setOnboardingOnlyJwt(jwt);
135
+ setView('collect-user-data-login-with-email');
136
+ onSettled === null || onSettled === void 0 ? void 0 : onSettled();
137
+ return;
138
+ }
139
+ setCallback('authSuccess');
140
+ yield createUserProfileByJWT(jwt);
141
+ setShowAuthFlow(false);
142
+ onSettled === null || onSettled === void 0 ? void 0 : onSettled();
143
+ }
144
+ catch (error) {
145
+ if (error instanceof utils.NoAccessError) {
146
+ setView('no-access');
147
+ }
148
+ handleError(types.SocialOAuthErrorCode.GENERAL_ERROR, error);
149
+ }
150
+ });
151
+ const connectSocialAccount = (provider, validator) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
152
+ var _b;
153
+ clearInterval(authWindowInterval.current);
154
+ clearError();
155
+ setIsProcessing(true);
156
+ if (!checkValidProvider(provider)) {
157
+ return;
158
+ }
159
+ // invalid connect request
160
+ if (validator && !validator(provider)) {
161
+ return;
162
+ }
163
+ const state = randomString.randomString(8);
164
+ const verifier = randomString.randomString(43);
165
+ const clearListeners = () => {
166
+ removeOAuthIFrame();
167
+ window.removeEventListener('message', handleAuthWindowMessage);
168
+ providersWaitingOauthMessages.current = Object.assign(Object.assign({}, providersWaitingOauthMessages.current), { [provider]: false });
169
+ };
170
+ const handleAuthWindowMessage = (event) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
171
+ var _c;
172
+ const message = event.data;
173
+ const isAuthorizationMessage = (message === null || message === void 0 ? void 0 : message.type) === 'authorization_response';
174
+ if (isAuthorizationMessage) {
175
+ logger.logger.debug('Message received', { data: message });
176
+ }
177
+ const isValidMessage = isAuthorizationMessage && (message === null || message === void 0 ? void 0 : message.provider) === provider;
178
+ // don't process invalid messages for provider
179
+ if (!isValidMessage) {
180
+ return;
181
+ }
182
+ setIsProcessing(true);
183
+ if (!((_c = providersWaitingOauthMessages.current) === null || _c === void 0 ? void 0 : _c[provider])) {
184
+ handleError(types.SocialOAuthErrorCode.SESSION_TIMEOUT, `Connecting ${provider} account session timeout.`);
185
+ return;
186
+ }
187
+ clearListeners();
188
+ const { code, error } = message;
189
+ if (error && error !== 'undefined') {
190
+ handleError(types.SocialOAuthErrorCode.OAUTH_ERROR, `Failed to connect ${provider} social account: ${error}`);
191
+ return;
192
+ }
193
+ if (!code) {
194
+ handleError(types.SocialOAuthErrorCode.NO_AUTH_CODE, `Failed to connect ${provider} social account: no authorization code`);
195
+ return;
196
+ }
197
+ if (authMode === 'signin') {
198
+ yield signInAccount(provider, code, verifier, state);
199
+ }
200
+ else {
201
+ yield linkAccount(provider, code, verifier, state);
202
+ }
203
+ setIsProcessing(false);
204
+ });
205
+ const loginUrl = yield api.getOauthLoginUrl(environmentId, provider, String(userJwt));
206
+ if (!loginUrl) {
207
+ handleError(types.SocialOAuthErrorCode.NO_OAUTH_URL, `Failed to get login url to connect social account: ${provider}`);
208
+ return;
209
+ }
210
+ // we need to use an iframe to be the intermediary in communications between the popup and the sdk
211
+ // because of twitter limitations with accessing the window.opener and BroadcastChannel not working between
212
+ // different origins (our api redirect page and the app where the sdk is running)
213
+ const oauthIFrameUrl = `${getRedirectURIOrigin.getRedirectURIOrigin(loginUrl)}/sdkoauth`;
214
+ addOAuthIFrame(oauthIFrameUrl);
215
+ let oauthLoginUrl = loginUrl;
216
+ if (providersRequiringPkce.includes(provider)) {
217
+ const digest = yield digestSHA256.digestSHA256(verifier);
218
+ const pkceParams = stringifyURIQuery.stringifyURIQuery({
219
+ code_challenge: encodeBase64URL.encodeBase64URL(digest),
220
+ code_challenge_method: 'S256',
221
+ state: state,
222
+ });
223
+ oauthLoginUrl = `${loginUrl}&${pkceParams}`;
224
+ }
225
+ if (!((_b = providersWaitingOauthMessages.current) === null || _b === void 0 ? void 0 : _b[provider])) {
226
+ window.addEventListener('message', handleAuthWindowMessage);
227
+ providersWaitingOauthMessages.current = Object.assign(Object.assign({}, providersWaitingOauthMessages.current), { [provider]: true });
228
+ }
229
+ const authWindow = window.open(oauthLoginUrl, '_blank', 'width=500,height=600');
230
+ if (authWindow === null || typeof authWindow === 'undefined') {
231
+ // Pop-ups are blocked
232
+ handleError(types.SocialOAuthErrorCode.OAUTH_WINDOW_BLOCKED, 'Please allow popups and try again.');
233
+ return;
234
+ }
235
+ if (!providersWithoutWindowOpenerRefence.includes(provider)) {
236
+ // For provider that support window.opener, we need to clear all states/listeners when the window is closed
237
+ authWindowInterval.current = setInterval(() => {
238
+ var _a;
239
+ if (!(authWindow === null || authWindow === void 0 ? void 0 : authWindow.closed)) {
240
+ return;
241
+ }
242
+ clearInterval(authWindowInterval.current);
243
+ setIsProcessing(false);
244
+ // user didn't complete oauth
245
+ if ((_a = providersWaitingOauthMessages.current) === null || _a === void 0 ? void 0 : _a[provider]) {
246
+ onError === null || onError === void 0 ? void 0 : onError();
247
+ onSettled === null || onSettled === void 0 ? void 0 : onSettled();
248
+ }
249
+ }, 2000);
250
+ }
251
+ else {
252
+ // For provider that don't support window.opener, we need to use a timeout to try to detect when the
253
+ // window is closed
254
+ authWindowInterval.current = setInterval(() => {
255
+ var _a;
256
+ // user didn't complete oauth
257
+ if ((_a = providersWaitingOauthMessages.current) === null || _a === void 0 ? void 0 : _a[provider]) {
258
+ clearListeners();
259
+ handleError(types.SocialOAuthErrorCode.OAUTH_WINDOW_TIMEOUT, `Connecting ${provider} account window timeout.`);
260
+ }
261
+ clearInterval(authWindowInterval.current);
262
+ setIsProcessing(false);
263
+ onSettled === null || onSettled === void 0 ? void 0 : onSettled();
264
+ }, sessionTimeout);
265
+ }
266
+ });
267
+ return {
268
+ checkValidProvider,
269
+ connectSocialAccount,
270
+ error,
271
+ handleError,
272
+ isProcessing,
273
+ setError,
274
+ setIsProcessing,
275
+ };
276
+ };
277
+
278
+ exports.useSocialAuth = useSocialAuth;
@@ -0,0 +1,20 @@
1
+ /// <reference types="react" />
2
+ import { ProviderEnum } from '@dynamic-labs/sdk-api';
3
+ import { SocialOAuthError, SocialOAuthErrorCode } from '@dynamic-labs/types';
4
+ type SocialAuthMode = 'link' | 'signin';
5
+ type UseSocialAuthProps = {
6
+ sessionTimeout: number;
7
+ authMode: SocialAuthMode;
8
+ onSettled?: () => void;
9
+ onError?: () => void;
10
+ };
11
+ export declare const useSocialAuth: ({ sessionTimeout, authMode, onSettled, onError, }: UseSocialAuthProps) => {
12
+ readonly checkValidProvider: (provider: ProviderEnum) => boolean;
13
+ readonly connectSocialAccount: (provider: ProviderEnum, validator?: ((provider: ProviderEnum) => boolean) | undefined) => Promise<void>;
14
+ readonly error: SocialOAuthError | undefined;
15
+ readonly handleError: (code: SocialOAuthErrorCode, message: string) => void;
16
+ readonly isProcessing: boolean;
17
+ readonly setError: import("react").Dispatch<import("react").SetStateAction<SocialOAuthError | undefined>>;
18
+ readonly setIsProcessing: import("react").Dispatch<import("react").SetStateAction<boolean>>;
19
+ };
20
+ export {};
@@ -0,0 +1,274 @@
1
+ import { __awaiter } from '../../../../../_virtual/_tslib.js';
2
+ import { useState, useRef } from 'react';
3
+ import { SocialOAuthErrorCode } from '@dynamic-labs/types';
4
+ import { SocialAccountAlreadyExistsError, NoAccessError } from '@dynamic-labs/utils';
5
+ import { useInternalDynamicContext } from '../../../context/DynamicContext/useInternalDynamicContext.js';
6
+ import { getOauthLoginUrl, verifyOAuth, signInOAuth } from '../../../data/api.js';
7
+ import { useUpdateUserProfileByJWTCallback } from '../useUpdateUserProfileByJWTCallback/useUpdateUserProfileByJWTCallback.js';
8
+ import { decodeJwt } from '../../../shared/utils/functions/decodeJwt/decodeJwt.js';
9
+ import '@dynamic-labs/iconic';
10
+ import '@dynamic-labs/wallet-connector-core';
11
+ import 'react/jsx-runtime';
12
+ import { useViewContext } from '../../../context/ViewContext/ViewContext.js';
13
+ import { logger } from '../../../shared/logger.js';
14
+ import '@dynamic-labs/wallet-book';
15
+ import '../../constants/colors.js';
16
+ import '../../../shared/utils/classes/storage/localStorage.js';
17
+ import 'ethers';
18
+ import '../../../shared/consts/index.js';
19
+ import '@dynamic-labs/multi-wallet';
20
+ import { getAuthToken } from '../../functions/getAuthToken/getAuthToken.js';
21
+ import '@dynamic-labs/sdk-api';
22
+ import { randomString } from '../../functions/randomString/randomString.js';
23
+ import { stringifyURIQuery } from '../../functions/stringifyURIQuery/stringifyURIQuery.js';
24
+ import { digestSHA256 } from '../../functions/digestSHA256/digestSHA256.js';
25
+ import { encodeBase64URL } from '../../functions/encodeBase64URL/encodeBase64URL.js';
26
+ import { getRedirectURIOrigin } from '../../functions/getRedirectURIOrigin/getRedirectURIOrigin.js';
27
+ import { useCreateUserProfileByJWTCallback } from '../useCreateUserProfileByJWTCallback/useCreateUserProfileByJWTCallback.js';
28
+ import { useErrorContext } from '../../../context/ErrorContext/ErrorContext.js';
29
+
30
+ const socialProviders = [
31
+ 'discord',
32
+ 'facebook',
33
+ 'github',
34
+ 'google',
35
+ 'instagram',
36
+ 'twitch',
37
+ 'twitter',
38
+ ];
39
+ // pkce params are only required for twitter and break if added for other providers, like google
40
+ // so we should only add provider that support pkce to this list
41
+ const providersRequiringPkce = ['twitter', 'github'];
42
+ const providersWithoutWindowOpenerRefence = ['twitter'];
43
+ // Hook to handle common social auth logic (for social linking and social sign in)
44
+ const useSocialAuth = ({ sessionTimeout, authMode, onSettled, onError, }) => {
45
+ var _a;
46
+ const { environmentId, onboardingOnlyJwt, setOnboardingOnlyJwt, setCallback, setShowAuthFlow, setIsVerificationInProgress, } = useInternalDynamicContext();
47
+ const { setView } = useViewContext();
48
+ const { setErrorMessage, setError: setContextError } = useErrorContext();
49
+ const { updateUserProfileByJWT } = useUpdateUserProfileByJWTCallback();
50
+ const { createUserProfileByJWT } = useCreateUserProfileByJWTCallback();
51
+ const [isProcessing, setIsProcessing] = useState(false);
52
+ const [error, setError] = useState();
53
+ const providersWaitingOauthMessages = useRef({});
54
+ const authWindowInterval = useRef();
55
+ const userJwt = (_a = getAuthToken()) !== null && _a !== void 0 ? _a : onboardingOnlyJwt;
56
+ const clearError = () => {
57
+ setError(undefined);
58
+ setContextError(undefined);
59
+ };
60
+ const handleError = (code, message) => {
61
+ logger.error(message);
62
+ setIsProcessing(false);
63
+ setError({ code, message });
64
+ setErrorMessage(code);
65
+ onError === null || onError === void 0 ? void 0 : onError();
66
+ onSettled === null || onSettled === void 0 ? void 0 : onSettled();
67
+ };
68
+ const addOAuthIFrame = (url) => {
69
+ const container = document.getElementById('oauth-iframe-container');
70
+ let oauthIFrame = document.getElementById('oauth-iframe');
71
+ if (!container || oauthIFrame) {
72
+ return;
73
+ }
74
+ oauthIFrame = document.createElement('iframe');
75
+ oauthIFrame.setAttribute('id', 'oauth-iframe');
76
+ oauthIFrame.setAttribute('src', url);
77
+ container.appendChild(oauthIFrame);
78
+ };
79
+ const removeOAuthIFrame = () => {
80
+ const oauthIFrame = document.getElementById('oauth-iframe');
81
+ if (oauthIFrame) {
82
+ oauthIFrame.remove();
83
+ }
84
+ };
85
+ const checkValidProvider = (provider) => {
86
+ if (!provider) {
87
+ handleError(SocialOAuthErrorCode.NO_PROVIDER, 'Provider is required');
88
+ return false;
89
+ }
90
+ if (!socialProviders.includes(provider)) {
91
+ handleError(SocialOAuthErrorCode.INVALID_PROVIDER, `Invalid social provider. Valid providers are: ${socialProviders.join(', ')}`);
92
+ return false;
93
+ }
94
+ return true;
95
+ };
96
+ const linkAccount = (provider, code, verifier, state) => __awaiter(void 0, void 0, void 0, function* () {
97
+ try {
98
+ const jwt = yield verifyOAuth(environmentId, provider, {
99
+ code,
100
+ codeVerifier: verifier,
101
+ state,
102
+ }, String(userJwt));
103
+ if (!jwt) {
104
+ handleError(SocialOAuthErrorCode.VERIFICATION_ERROR, `Failed to link social account: ${provider}`);
105
+ return;
106
+ }
107
+ yield updateUserProfileByJWT(jwt);
108
+ onSettled === null || onSettled === void 0 ? void 0 : onSettled();
109
+ }
110
+ catch (error) {
111
+ if (error instanceof SocialAccountAlreadyExistsError) {
112
+ handleError(SocialOAuthErrorCode.ACCOUNT_ALREADY_LINKED_TO_DIFFERENT_PROFILE, `Social account already linked to a different profile: ${provider}`);
113
+ }
114
+ }
115
+ });
116
+ const signInAccount = (provider, code, verifier, state) => __awaiter(void 0, void 0, void 0, function* () {
117
+ try {
118
+ const jwt = yield signInOAuth(environmentId, provider, {
119
+ code,
120
+ codeVerifier: verifier,
121
+ state,
122
+ });
123
+ if (!jwt) {
124
+ handleError(SocialOAuthErrorCode.SIGNIN_ERROR, `Failed to sign-in with social account: ${provider}`);
125
+ return;
126
+ }
127
+ setIsVerificationInProgress(true);
128
+ const decodedJwt = decodeJwt(jwt);
129
+ if (decodedJwt === null || decodedJwt === void 0 ? void 0 : decodedJwt.missingFields.length) {
130
+ setOnboardingOnlyJwt(jwt);
131
+ setView('collect-user-data-login-with-email');
132
+ onSettled === null || onSettled === void 0 ? void 0 : onSettled();
133
+ return;
134
+ }
135
+ setCallback('authSuccess');
136
+ yield createUserProfileByJWT(jwt);
137
+ setShowAuthFlow(false);
138
+ onSettled === null || onSettled === void 0 ? void 0 : onSettled();
139
+ }
140
+ catch (error) {
141
+ if (error instanceof NoAccessError) {
142
+ setView('no-access');
143
+ }
144
+ handleError(SocialOAuthErrorCode.GENERAL_ERROR, error);
145
+ }
146
+ });
147
+ const connectSocialAccount = (provider, validator) => __awaiter(void 0, void 0, void 0, function* () {
148
+ var _b;
149
+ clearInterval(authWindowInterval.current);
150
+ clearError();
151
+ setIsProcessing(true);
152
+ if (!checkValidProvider(provider)) {
153
+ return;
154
+ }
155
+ // invalid connect request
156
+ if (validator && !validator(provider)) {
157
+ return;
158
+ }
159
+ const state = randomString(8);
160
+ const verifier = randomString(43);
161
+ const clearListeners = () => {
162
+ removeOAuthIFrame();
163
+ window.removeEventListener('message', handleAuthWindowMessage);
164
+ providersWaitingOauthMessages.current = Object.assign(Object.assign({}, providersWaitingOauthMessages.current), { [provider]: false });
165
+ };
166
+ const handleAuthWindowMessage = (event) => __awaiter(void 0, void 0, void 0, function* () {
167
+ var _c;
168
+ const message = event.data;
169
+ const isAuthorizationMessage = (message === null || message === void 0 ? void 0 : message.type) === 'authorization_response';
170
+ if (isAuthorizationMessage) {
171
+ logger.debug('Message received', { data: message });
172
+ }
173
+ const isValidMessage = isAuthorizationMessage && (message === null || message === void 0 ? void 0 : message.provider) === provider;
174
+ // don't process invalid messages for provider
175
+ if (!isValidMessage) {
176
+ return;
177
+ }
178
+ setIsProcessing(true);
179
+ if (!((_c = providersWaitingOauthMessages.current) === null || _c === void 0 ? void 0 : _c[provider])) {
180
+ handleError(SocialOAuthErrorCode.SESSION_TIMEOUT, `Connecting ${provider} account session timeout.`);
181
+ return;
182
+ }
183
+ clearListeners();
184
+ const { code, error } = message;
185
+ if (error && error !== 'undefined') {
186
+ handleError(SocialOAuthErrorCode.OAUTH_ERROR, `Failed to connect ${provider} social account: ${error}`);
187
+ return;
188
+ }
189
+ if (!code) {
190
+ handleError(SocialOAuthErrorCode.NO_AUTH_CODE, `Failed to connect ${provider} social account: no authorization code`);
191
+ return;
192
+ }
193
+ if (authMode === 'signin') {
194
+ yield signInAccount(provider, code, verifier, state);
195
+ }
196
+ else {
197
+ yield linkAccount(provider, code, verifier, state);
198
+ }
199
+ setIsProcessing(false);
200
+ });
201
+ const loginUrl = yield getOauthLoginUrl(environmentId, provider, String(userJwt));
202
+ if (!loginUrl) {
203
+ handleError(SocialOAuthErrorCode.NO_OAUTH_URL, `Failed to get login url to connect social account: ${provider}`);
204
+ return;
205
+ }
206
+ // we need to use an iframe to be the intermediary in communications between the popup and the sdk
207
+ // because of twitter limitations with accessing the window.opener and BroadcastChannel not working between
208
+ // different origins (our api redirect page and the app where the sdk is running)
209
+ const oauthIFrameUrl = `${getRedirectURIOrigin(loginUrl)}/sdkoauth`;
210
+ addOAuthIFrame(oauthIFrameUrl);
211
+ let oauthLoginUrl = loginUrl;
212
+ if (providersRequiringPkce.includes(provider)) {
213
+ const digest = yield digestSHA256(verifier);
214
+ const pkceParams = stringifyURIQuery({
215
+ code_challenge: encodeBase64URL(digest),
216
+ code_challenge_method: 'S256',
217
+ state: state,
218
+ });
219
+ oauthLoginUrl = `${loginUrl}&${pkceParams}`;
220
+ }
221
+ if (!((_b = providersWaitingOauthMessages.current) === null || _b === void 0 ? void 0 : _b[provider])) {
222
+ window.addEventListener('message', handleAuthWindowMessage);
223
+ providersWaitingOauthMessages.current = Object.assign(Object.assign({}, providersWaitingOauthMessages.current), { [provider]: true });
224
+ }
225
+ const authWindow = window.open(oauthLoginUrl, '_blank', 'width=500,height=600');
226
+ if (authWindow === null || typeof authWindow === 'undefined') {
227
+ // Pop-ups are blocked
228
+ handleError(SocialOAuthErrorCode.OAUTH_WINDOW_BLOCKED, 'Please allow popups and try again.');
229
+ return;
230
+ }
231
+ if (!providersWithoutWindowOpenerRefence.includes(provider)) {
232
+ // For provider that support window.opener, we need to clear all states/listeners when the window is closed
233
+ authWindowInterval.current = setInterval(() => {
234
+ var _a;
235
+ if (!(authWindow === null || authWindow === void 0 ? void 0 : authWindow.closed)) {
236
+ return;
237
+ }
238
+ clearInterval(authWindowInterval.current);
239
+ setIsProcessing(false);
240
+ // user didn't complete oauth
241
+ if ((_a = providersWaitingOauthMessages.current) === null || _a === void 0 ? void 0 : _a[provider]) {
242
+ onError === null || onError === void 0 ? void 0 : onError();
243
+ onSettled === null || onSettled === void 0 ? void 0 : onSettled();
244
+ }
245
+ }, 2000);
246
+ }
247
+ else {
248
+ // For provider that don't support window.opener, we need to use a timeout to try to detect when the
249
+ // window is closed
250
+ authWindowInterval.current = setInterval(() => {
251
+ var _a;
252
+ // user didn't complete oauth
253
+ if ((_a = providersWaitingOauthMessages.current) === null || _a === void 0 ? void 0 : _a[provider]) {
254
+ clearListeners();
255
+ handleError(SocialOAuthErrorCode.OAUTH_WINDOW_TIMEOUT, `Connecting ${provider} account window timeout.`);
256
+ }
257
+ clearInterval(authWindowInterval.current);
258
+ setIsProcessing(false);
259
+ onSettled === null || onSettled === void 0 ? void 0 : onSettled();
260
+ }, sessionTimeout);
261
+ }
262
+ });
263
+ return {
264
+ checkValidProvider,
265
+ connectSocialAccount,
266
+ error,
267
+ handleError,
268
+ isProcessing,
269
+ setError,
270
+ setIsProcessing,
271
+ };
272
+ };
273
+
274
+ export { useSocialAuth };
@@ -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.
@@ -149,13 +149,23 @@ const useVerifyWallet = ({ consumeNonce, displaySiweStatement, environmentId, pr
149
149
  }
150
150
  };
151
151
  return ({ walletConnector, fetchPublicAddressOpts, publicWalletAddress, captchaToken, oauth, }) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
152
+ var _a;
152
153
  const walletProvider = getWalletProvider.getWalletProvider(walletConnector);
153
154
  try {
154
155
  setIsVerificationInProgress(true);
155
- const Jwt = yield generateJWT(walletConnector, walletProvider, fetchPublicAddressOpts, publicWalletAddress, captchaToken, oauth);
156
+ const { Jwt, verifyArgs } = yield generateJWT(walletConnector, walletProvider, fetchPublicAddressOpts, publicWalletAddress, captchaToken, oauth);
156
157
  const decodedJwt = decodeJwt.decodeJwt(Jwt);
157
158
  if (decodedJwt === undefined)
158
159
  throw new utils.DynamicError('Invalid token!');
160
+ try {
161
+ (_a = eventsCallbacks === null || eventsCallbacks === void 0 ? void 0 : eventsCallbacks.onSignedMessage) === null || _a === void 0 ? void 0 : _a.call(eventsCallbacks, {
162
+ messageToSign: verifyArgs.messageToSign,
163
+ signedMessage: verifyArgs.signedMessage,
164
+ });
165
+ }
166
+ catch (_b) {
167
+ logger.logger.warn('Error calling onSignedMessage callback');
168
+ }
159
169
  const user = yield createUserProfile.createUserProfile(decodedJwt);
160
170
  const isKycRequired = decodedJwt.missingFields.length;
161
171
  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.
@@ -145,13 +145,23 @@ const useVerifyWallet = ({ consumeNonce, displaySiweStatement, environmentId, pr
145
145
  }
146
146
  };
147
147
  return ({ walletConnector, fetchPublicAddressOpts, publicWalletAddress, captchaToken, oauth, }) => __awaiter(void 0, void 0, void 0, function* () {
148
+ var _a;
148
149
  const walletProvider = getWalletProvider(walletConnector);
149
150
  try {
150
151
  setIsVerificationInProgress(true);
151
- const Jwt = yield generateJWT(walletConnector, walletProvider, fetchPublicAddressOpts, publicWalletAddress, captchaToken, oauth);
152
+ const { Jwt, verifyArgs } = yield generateJWT(walletConnector, walletProvider, fetchPublicAddressOpts, publicWalletAddress, captchaToken, oauth);
152
153
  const decodedJwt = decodeJwt(Jwt);
153
154
  if (decodedJwt === undefined)
154
155
  throw new DynamicError('Invalid token!');
156
+ try {
157
+ (_a = eventsCallbacks === null || eventsCallbacks === void 0 ? void 0 : eventsCallbacks.onSignedMessage) === null || _a === void 0 ? void 0 : _a.call(eventsCallbacks, {
158
+ messageToSign: verifyArgs.messageToSign,
159
+ signedMessage: verifyArgs.signedMessage,
160
+ });
161
+ }
162
+ catch (_b) {
163
+ logger.warn('Error calling onSignedMessage callback');
164
+ }
155
165
  const user = yield createUserProfile(decodedJwt);
156
166
  const isKycRequired = decodedJwt.missingFields.length;
157
167
  setOnboardingOnlyJwt(Jwt);