@dynamic-labs/sdk-react-core 2.1.0-alpha.22 → 2.1.0-alpha.23
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 +15 -0
- package/package.cjs +1 -1
- package/package.js +1 -1
- package/package.json +13 -13
- package/src/index.d.ts +5 -1
- package/src/lib/components/AuthProviderIcon/AuthProviderIcon.cjs +2 -6
- package/src/lib/components/AuthProviderIcon/AuthProviderIcon.js +2 -6
- package/src/lib/components/SyncEmbeddedWalletAuthFlow/SyncEmbeddedWalletAuthFlow.cjs +11 -5
- package/src/lib/components/SyncEmbeddedWalletAuthFlow/SyncEmbeddedWalletAuthFlow.js +11 -5
- package/src/lib/context/DynamicContext/DynamicContext.cjs +8 -17
- package/src/lib/context/DynamicContext/DynamicContext.js +8 -17
- package/src/lib/context/DynamicContext/hooks/useHandleLogout/types.d.ts +0 -1
- package/src/lib/context/DynamicContext/hooks/useHandleLogout/useHandleLogout.cjs +0 -2
- package/src/lib/context/DynamicContext/hooks/useHandleLogout/useHandleLogout.js +1 -3
- package/src/lib/context/DynamicContext/hooks/useIsAuthenticated/index.d.ts +1 -0
- package/src/lib/context/DynamicContext/hooks/useIsAuthenticated/useIsAuthenticated.cjs +37 -0
- package/src/lib/context/DynamicContext/hooks/useIsAuthenticated/useIsAuthenticated.d.ts +1 -0
- package/src/lib/context/DynamicContext/hooks/useIsAuthenticated/useIsAuthenticated.js +33 -0
- package/src/lib/context/DynamicContext/hooks/useTieCallbacksToEvents/useTieCallbacksToEvents.cjs +9 -1
- package/src/lib/context/DynamicContext/hooks/useTieCallbacksToEvents/useTieCallbacksToEvents.js +9 -1
- package/src/lib/context/DynamicContext/types/index.d.ts +1 -4
- package/src/lib/context/LoadingContext/LoadingContext.cjs +1 -1
- package/src/lib/context/LoadingContext/LoadingContext.js +1 -1
- package/src/lib/context/PhantomRedirectContext/useResponseHandlers.cjs +1 -1
- package/src/lib/context/PhantomRedirectContext/useResponseHandlers.js +1 -1
- package/src/lib/context/SocialRedirectContext/SocialRedirectContext.cjs +1 -1
- package/src/lib/context/SocialRedirectContext/SocialRedirectContext.js +1 -1
- package/src/lib/data/api/api.cjs +1 -3
- package/src/lib/data/api/api.js +1 -3
- package/src/lib/data/api/user/user.cjs +9 -6
- package/src/lib/data/api/user/user.d.ts +5 -5
- package/src/lib/data/api/user/user.js +9 -6
- package/src/lib/data/api/wallets/wallets.cjs +6 -3
- package/src/lib/data/api/wallets/wallets.d.ts +3 -2
- package/src/lib/data/api/wallets/wallets.js +7 -4
- package/src/lib/events/auth.d.ts +38 -0
- package/src/lib/events/dynamicEvents.d.ts +8 -32
- package/src/lib/events/embeddedWallet.d.ts +14 -0
- package/src/lib/events/otp.d.ts +5 -0
- package/src/lib/events/passkey.d.ts +5 -0
- package/src/lib/events/social.d.ts +3 -0
- package/src/lib/events/ui.d.ts +10 -0
- package/src/lib/events/wallets.d.ts +7 -0
- package/src/lib/layout/DynamicAuthLayout/Header/header.cjs +6 -1
- package/src/lib/layout/DynamicAuthLayout/Header/header.js +6 -1
- package/src/lib/shared/types/dynamicEventsCallbacks.d.ts +11 -0
- package/src/lib/store/utils/storeAuthTokenAndUser/storeAuthTokenAndUser.cjs +1 -2
- package/src/lib/store/utils/storeAuthTokenAndUser/storeAuthTokenAndUser.d.ts +6 -2
- package/src/lib/store/utils/storeAuthTokenAndUser/storeAuthTokenAndUser.js +1 -2
- package/src/lib/utils/constants/index.d.ts +1 -1
- package/src/lib/utils/constants/localStorage.cjs +0 -2
- package/src/lib/utils/constants/localStorage.d.ts +0 -1
- package/src/lib/utils/constants/localStorage.js +1 -2
- package/src/lib/utils/functions/index.d.ts +0 -1
- package/src/lib/utils/hooks/authenticationHooks/useConnectAndSign/useConnectAndSign.cjs +1 -1
- package/src/lib/utils/hooks/authenticationHooks/useConnectAndSign/useConnectAndSign.js +1 -1
- package/src/lib/utils/hooks/authenticationHooks/useConnectAndSignSplitSteps/useConnectAndSignSplitSteps.cjs +1 -1
- package/src/lib/utils/hooks/authenticationHooks/useConnectAndSignSplitSteps/useConnectAndSignSplitSteps.js +1 -1
- package/src/lib/utils/hooks/authenticationHooks/useOtpVerificationRequest/useOtpVerificationRequest.cjs +12 -7
- package/src/lib/utils/hooks/authenticationHooks/useOtpVerificationRequest/useOtpVerificationRequest.js +13 -8
- package/src/lib/utils/hooks/authenticationHooks/useSignConnectOnlyUser/useSignConnectOnlyUser.cjs +1 -1
- package/src/lib/utils/hooks/authenticationHooks/useSignConnectOnlyUser/useSignConnectOnlyUser.js +1 -1
- package/src/lib/utils/hooks/events/useDynamicEvents/useDynamicEvents.d.ts +2 -2
- package/src/lib/utils/hooks/useCreateDynamicEmbeddedWalletMutation/useCreateDynamicEmbeddedWalletMutation.cjs +1 -2
- package/src/lib/utils/hooks/useCreateDynamicEmbeddedWalletMutation/useCreateDynamicEmbeddedWalletMutation.d.ts +1 -2
- package/src/lib/utils/hooks/useCreateDynamicEmbeddedWalletMutation/useCreateDynamicEmbeddedWalletMutation.js +1 -2
- package/src/lib/utils/hooks/useEmailProvider/useEmailProvider.cjs +29 -14
- package/src/lib/utils/hooks/useEmailProvider/useEmailProvider.js +29 -14
- package/src/lib/utils/hooks/useEmbeddedWallet/useEmbeddedWallet.cjs +4 -3
- package/src/lib/utils/hooks/useEmbeddedWallet/useEmbeddedWallet.js +4 -3
- package/src/lib/utils/hooks/useEmbeddedWallet/useMPCEmbeddedWallet/useMPCEmbeddedWallet.cjs +1 -1
- package/src/lib/utils/hooks/useEmbeddedWallet/useMPCEmbeddedWallet/useMPCEmbeddedWallet.js +2 -2
- package/src/lib/utils/hooks/useEmbeddedWallet/useSecureEnclaveEmbeddedWallet/useSecureEnclaveEmbeddedWallet.cjs +4 -5
- package/src/lib/utils/hooks/useEmbeddedWallet/useSecureEnclaveEmbeddedWallet/useSecureEnclaveEmbeddedWallet.js +5 -6
- package/src/lib/utils/hooks/useEmbeddedWallet/useSecureEnclaveEmbeddedWallet/useTurnkey/useTurnkey.cjs +0 -1
- package/src/lib/utils/hooks/useEmbeddedWallet/useSecureEnclaveEmbeddedWallet/useTurnkey/useTurnkey.js +0 -1
- package/src/lib/utils/hooks/useEmbeddedWalletPassword/useEmbeddedWalletPassword.cjs +2 -2
- package/src/lib/utils/hooks/useEmbeddedWalletPassword/useEmbeddedWalletPassword.js +2 -2
- package/src/lib/utils/hooks/useHandleUnlinkWallet/useHandleUnlinkWallet.cjs +8 -6
- package/src/lib/utils/hooks/useHandleUnlinkWallet/useHandleUnlinkWallet.js +8 -6
- package/src/lib/utils/hooks/useHandleVerificationRequired/useHandleVerificationRequired.cjs +4 -4
- package/src/lib/utils/hooks/useHandleVerificationRequired/useHandleVerificationRequired.d.ts +4 -3
- package/src/lib/utils/hooks/useHandleVerificationRequired/useHandleVerificationRequired.js +4 -4
- package/src/lib/utils/hooks/useHandleVerifiedUser/useHandleVerifiedUser.cjs +1 -16
- package/src/lib/utils/hooks/useHandleVerifiedUser/useHandleVerifiedUser.d.ts +1 -4
- package/src/lib/utils/hooks/useHandleVerifiedUser/useHandleVerifiedUser.js +1 -16
- package/src/lib/utils/hooks/useMergeUserAccounts/useMergeUserAccounts.cjs +1 -1
- package/src/lib/utils/hooks/useMergeUserAccounts/useMergeUserAccounts.js +1 -1
- package/src/lib/utils/hooks/useMfa/useMfa.cjs +37 -20
- package/src/lib/utils/hooks/useMfa/useMfa.js +37 -20
- package/src/lib/utils/hooks/useNetworkNotSupported/useNetworkNotSupported.cjs +1 -1
- package/src/lib/utils/hooks/useNetworkNotSupported/useNetworkNotSupported.js +1 -1
- package/src/lib/utils/hooks/usePasskeyRecovery/usePasskeyRecovery.cjs +13 -12
- package/src/lib/utils/hooks/usePasskeyRecovery/usePasskeyRecovery.js +13 -12
- package/src/lib/utils/hooks/usePrimaryWalletId/usePrimaryWalletId.cjs +6 -11
- package/src/lib/utils/hooks/usePrimaryWalletId/usePrimaryWalletId.d.ts +3 -2
- package/src/lib/utils/hooks/usePrimaryWalletId/usePrimaryWalletId.js +6 -11
- package/src/lib/utils/hooks/useSetWalletConnectorVerifiedCredentials/useSetWalletConnectorVerifiedCredentials.cjs +3 -22
- package/src/lib/utils/hooks/useSetWalletConnectorVerifiedCredentials/useSetWalletConnectorVerifiedCredentials.d.ts +2 -1
- package/src/lib/utils/hooks/useSetWalletConnectorVerifiedCredentials/useSetWalletConnectorVerifiedCredentials.js +3 -22
- package/src/lib/utils/hooks/useSocialAccounts/useSocialAccounts.cjs +8 -8
- package/src/lib/utils/hooks/useSocialAccounts/useSocialAccounts.js +8 -8
- package/src/lib/utils/hooks/useSocialAuth/useSocialAuth.cjs +39 -27
- package/src/lib/utils/hooks/useSocialAuth/useSocialAuth.d.ts +5 -3
- package/src/lib/utils/hooks/useSocialAuth/useSocialAuth.js +39 -27
- package/src/lib/utils/hooks/useUserAuth/useUserAuth.cjs +39 -33
- package/src/lib/utils/hooks/useUserAuth/useUserAuth.d.ts +2 -2
- package/src/lib/utils/hooks/useUserAuth/useUserAuth.js +39 -33
- package/src/lib/utils/hooks/useUserAuth/useUserAuth.types.d.ts +7 -24
- package/src/lib/utils/hooks/useUserDataForm/useUserDataForm.cjs +1 -1
- package/src/lib/utils/hooks/useUserDataForm/useUserDataForm.js +1 -1
- package/src/lib/utils/hooks/useUserUpdateRequest/useUpdateUser/useUpdateUser.cjs +9 -16
- package/src/lib/utils/hooks/useUserUpdateRequest/useUpdateUser/useUpdateUser.js +10 -17
- package/src/lib/utils/hooks/useValidateSession/useValidateSession.cjs +1 -1
- package/src/lib/utils/hooks/useValidateSession/useValidateSession.js +1 -1
- package/src/lib/utils/hooks/useVerifyWallet/useVerifyWallet.cjs +21 -3
- package/src/lib/utils/hooks/useVerifyWallet/useVerifyWallet.js +21 -3
- package/src/lib/utils/hooks/useWalletConnectors/useWalletConnectors.cjs +10 -26
- package/src/lib/utils/hooks/useWalletConnectors/useWalletConnectors.d.ts +1 -2
- package/src/lib/utils/hooks/useWalletConnectors/useWalletConnectors.js +10 -26
- package/src/lib/views/CollectUserDataView/CollectUserDataView.cjs +4 -6
- package/src/lib/views/CollectUserDataView/CollectUserDataView.js +4 -6
- package/src/lib/views/CollectUserDataView/OnboardingUserDataForm/OnboardingUserDataForm.cjs +3 -5
- package/src/lib/views/CollectUserDataView/OnboardingUserDataForm/OnboardingUserDataForm.js +3 -5
- package/src/lib/views/CollectUserDataViewNoWallet/CollectUserDataViewNoWallet.cjs +3 -5
- package/src/lib/views/CollectUserDataViewNoWallet/CollectUserDataViewNoWallet.js +3 -5
- package/src/lib/views/EmailVerification/EmailVerification.cjs +8 -5
- package/src/lib/views/EmailVerification/EmailVerification.js +8 -5
- package/src/lib/views/EmailWalletOTPVerificationView/EmailWalletOTPVerificationView.cjs +5 -0
- package/src/lib/views/EmailWalletOTPVerificationView/EmailWalletOTPVerificationView.js +5 -0
- package/src/lib/views/EmbeddedReveal/EmbeddedRevealView/EmbeddedRevealView.cjs +3 -6
- package/src/lib/views/EmbeddedReveal/EmbeddedRevealView/EmbeddedRevealView.js +3 -6
- package/src/lib/views/EmbeddedReveal/utils/turnkeyExport/turnkeyExport.cjs +7 -13
- package/src/lib/views/EmbeddedReveal/utils/turnkeyExport/turnkeyExport.d.ts +3 -3
- package/src/lib/views/EmbeddedReveal/utils/turnkeyExport/turnkeyExport.js +8 -14
- package/src/lib/views/LoginView/LoginView.cjs +3 -21
- package/src/lib/views/LoginView/LoginView.js +4 -22
- package/src/lib/views/LoginView/sections/PhoneNumberSignInSection/useSubmitPhoneNumber/useSubmitPhoneNumber.cjs +11 -1
- package/src/lib/views/LoginView/sections/PhoneNumberSignInSection/useSubmitPhoneNumber/useSubmitPhoneNumber.js +11 -1
- package/src/lib/views/MergeUserAccountsWithSameEmailView/MergeUserAccountsWithSameEmailView.cjs +3 -3
- package/src/lib/views/MergeUserAccountsWithSameEmailView/MergeUserAccountsWithSameEmailView.js +3 -3
- package/src/lib/views/NoAccess/NoAccess.cjs +2 -2
- package/src/lib/views/NoAccess/NoAccess.js +2 -2
- package/src/lib/views/Passkey/PasskeyIntroView/PasskeyIntroView.cjs +2 -8
- package/src/lib/views/Passkey/PasskeyIntroView/PasskeyIntroView.js +2 -8
- package/src/lib/views/Passkey/PasskeyRecovery/BundleValidation/PasskeyBundleRecovery.cjs +3 -3
- package/src/lib/views/Passkey/PasskeyRecovery/BundleValidation/PasskeyBundleRecovery.js +3 -3
- package/src/lib/views/Passkey/PasskeyRecovery/CompleteRecovery/PasskeyCompleteRecovery.cjs +1 -2
- package/src/lib/views/Passkey/PasskeyRecovery/CompleteRecovery/PasskeyCompleteRecovery.js +1 -2
- package/src/lib/views/Passkey/utils/createEmbeddedWalletRequest/createEmbeddedWalletRequest.cjs +1 -4
- package/src/lib/views/Passkey/utils/createEmbeddedWalletRequest/createEmbeddedWalletRequest.d.ts +1 -2
- package/src/lib/views/Passkey/utils/createEmbeddedWalletRequest/createEmbeddedWalletRequest.js +1 -4
- package/src/lib/views/Passkey/utils/passkeyRecovery/passkeyRecovery.cjs +15 -20
- package/src/lib/views/Passkey/utils/passkeyRecovery/passkeyRecovery.d.ts +8 -13
- package/src/lib/views/Passkey/utils/passkeyRecovery/passkeyRecovery.js +15 -20
- package/src/lib/views/SmsVerification/useSmsVerification/useSmsVerification.cjs +11 -8
- package/src/lib/views/SmsVerification/useSmsVerification/useSmsVerification.js +11 -8
- package/src/lib/views/viewToComponentMap.cjs +1 -1
- package/src/lib/views/viewToComponentMap.d.ts +1 -1
- package/src/lib/views/viewToComponentMap.js +1 -1
- package/src/lib/widgets/DynamicWidget/context/DynamicWidgetContext.cjs +1 -1
- package/src/lib/widgets/DynamicWidget/context/DynamicWidgetContext.js +1 -1
- package/src/lib/utils/functions/getOnboardingAuthToken/getOnboardingAuthToken.cjs +0 -31
- package/src/lib/utils/functions/getOnboardingAuthToken/getOnboardingAuthToken.d.ts +0 -1
- package/src/lib/utils/functions/getOnboardingAuthToken/getOnboardingAuthToken.js +0 -27
- package/src/lib/utils/functions/getOnboardingAuthToken/index.d.ts +0 -1
- package/src/lib/utils/functions/handleUnlinkHelper/handleUnlinkHelper.cjs +0 -49
- package/src/lib/utils/functions/handleUnlinkHelper/handleUnlinkHelper.d.ts +0 -13
- package/src/lib/utils/functions/handleUnlinkHelper/handleUnlinkHelper.js +0 -45
- package/src/lib/utils/functions/handleUnlinkHelper/index.d.ts +0 -1
|
@@ -19,7 +19,7 @@ require('../../constants/colors.cjs');
|
|
|
19
19
|
require('../../constants/values.cjs');
|
|
20
20
|
require('../../../shared/utils/classes/storage/localStorage.cjs');
|
|
21
21
|
require('../../../shared/consts/index.cjs');
|
|
22
|
-
require('../../../events/dynamicEvents.cjs');
|
|
22
|
+
var dynamicEvents = require('../../../events/dynamicEvents.cjs');
|
|
23
23
|
require('../../../context/CaptchaContext/CaptchaContext.cjs');
|
|
24
24
|
var ErrorContext = require('../../../context/ErrorContext/ErrorContext.cjs');
|
|
25
25
|
var digestSHA256 = require('../../functions/digestSHA256/digestSHA256.cjs');
|
|
@@ -120,13 +120,23 @@ const useSocialAuth = ({ sessionTimeout, onSettled, onError, onFarcasterUrl, })
|
|
|
120
120
|
setError(undefined);
|
|
121
121
|
setContextError(undefined);
|
|
122
122
|
};
|
|
123
|
-
const
|
|
123
|
+
const onFailed = (provider, reason, options) => {
|
|
124
|
+
onError === null || onError === void 0 ? void 0 : onError();
|
|
125
|
+
onSettled === null || onSettled === void 0 ? void 0 : onSettled();
|
|
126
|
+
if (provider && (options === null || options === void 0 ? void 0 : options.raiseAuthFailure))
|
|
127
|
+
dynamicEvents.dynamicEvents.emit('authFailure', {
|
|
128
|
+
option: provider,
|
|
129
|
+
provider,
|
|
130
|
+
type: 'social',
|
|
131
|
+
}, reason);
|
|
132
|
+
};
|
|
133
|
+
const handleError = (provider, code, message, options) => {
|
|
134
|
+
const error = { code, message };
|
|
124
135
|
logger.logger.error(message);
|
|
125
136
|
setIsProcessing(false);
|
|
126
|
-
setError(
|
|
137
|
+
setError(error);
|
|
127
138
|
setErrorMessage(code);
|
|
128
|
-
|
|
129
|
-
onSettled === null || onSettled === void 0 ? void 0 : onSettled();
|
|
139
|
+
onFailed(provider, { error }, options);
|
|
130
140
|
};
|
|
131
141
|
const poolOauthResult = (provider, state) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
|
|
132
142
|
if (!shouldPool.current) {
|
|
@@ -148,13 +158,13 @@ const useSocialAuth = ({ sessionTimeout, onSettled, onError, onFarcasterUrl, })
|
|
|
148
158
|
};
|
|
149
159
|
window.postMessage(authMessage, '*');
|
|
150
160
|
});
|
|
151
|
-
const checkValidProvider = (provider) => {
|
|
161
|
+
const checkValidProvider = (provider, authMode) => {
|
|
152
162
|
if (!provider) {
|
|
153
|
-
handleError(types.SocialOAuthErrorCode.NO_PROVIDER, 'Provider is required');
|
|
163
|
+
handleError(provider, types.SocialOAuthErrorCode.NO_PROVIDER, 'Provider is required', { raiseAuthFailure: authMode === 'signin' });
|
|
154
164
|
return false;
|
|
155
165
|
}
|
|
156
166
|
if (!socialProviders.includes(provider)) {
|
|
157
|
-
handleError(types.SocialOAuthErrorCode.INVALID_PROVIDER, `Invalid social provider. Valid providers are: ${socialProviders.join(', ')}
|
|
167
|
+
handleError(provider, types.SocialOAuthErrorCode.INVALID_PROVIDER, `Invalid social provider. Valid providers are: ${socialProviders.join(', ')}`, { raiseAuthFailure: authMode === 'signin' });
|
|
158
168
|
return false;
|
|
159
169
|
}
|
|
160
170
|
return true;
|
|
@@ -163,7 +173,7 @@ const useSocialAuth = ({ sessionTimeout, onSettled, onError, onFarcasterUrl, })
|
|
|
163
173
|
try {
|
|
164
174
|
const response = yield apiCall();
|
|
165
175
|
if (!response) {
|
|
166
|
-
handleError(types.SocialOAuthErrorCode.VERIFICATION_ERROR, `Failed to link social account: ${provider}
|
|
176
|
+
handleError(provider, types.SocialOAuthErrorCode.VERIFICATION_ERROR, `Failed to link social account: ${provider}`, { raiseAuthFailure: false });
|
|
167
177
|
return;
|
|
168
178
|
}
|
|
169
179
|
yield updateUserProfileByJWT(response.jwt, response.minifiedJwt);
|
|
@@ -171,13 +181,13 @@ const useSocialAuth = ({ sessionTimeout, onSettled, onError, onFarcasterUrl, })
|
|
|
171
181
|
}
|
|
172
182
|
catch (error) {
|
|
173
183
|
if (error instanceof utils.SocialAccountAlreadyExistsError) {
|
|
174
|
-
handleError(types.SocialOAuthErrorCode.ACCOUNT_ALREADY_LINKED_TO_DIFFERENT_PROFILE, `Social account already linked to a different profile: ${provider}
|
|
184
|
+
handleError(provider, types.SocialOAuthErrorCode.ACCOUNT_ALREADY_LINKED_TO_DIFFERENT_PROFILE, `Social account already linked to a different profile: ${provider}`, { raiseAuthFailure: false });
|
|
175
185
|
}
|
|
176
186
|
}
|
|
177
187
|
});
|
|
178
188
|
const signInAccount = (provider, apiCall) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
|
|
179
189
|
yield initAuth({
|
|
180
|
-
onError: () => handleError(types.SocialOAuthErrorCode.SIGNIN_ERROR, `Failed to sign-in with social account: ${provider}
|
|
190
|
+
onError: () => handleError(provider, types.SocialOAuthErrorCode.SIGNIN_ERROR, `Failed to sign-in with social account: ${provider}`, { raiseAuthFailure: true }),
|
|
181
191
|
onSettled,
|
|
182
192
|
options: { provider },
|
|
183
193
|
verifyFunction: () => apiCall(),
|
|
@@ -192,17 +202,20 @@ const useSocialAuth = ({ sessionTimeout, onSettled, onError, onFarcasterUrl, })
|
|
|
192
202
|
logger.logger.error('Auth mode is required. Please use either "link" or "signin"');
|
|
193
203
|
return;
|
|
194
204
|
}
|
|
195
|
-
if (!checkValidProvider(provider)) {
|
|
205
|
+
if (!checkValidProvider(provider, authMode)) {
|
|
196
206
|
return;
|
|
197
207
|
}
|
|
198
208
|
// invalid connect request
|
|
199
209
|
if (validator && !validator(provider)) {
|
|
200
210
|
return;
|
|
201
211
|
}
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
212
|
+
dynamicEvents.dynamicEvents.emit('authInit', {
|
|
213
|
+
option: provider,
|
|
214
|
+
provider,
|
|
215
|
+
type: 'social',
|
|
216
|
+
});
|
|
217
|
+
if (provider === sdkApiCore.ProviderEnum.Farcaster)
|
|
218
|
+
return connectWithFarcaster(authMode);
|
|
206
219
|
const authWindow = window.open('', '_blank', 'width=500,height=600');
|
|
207
220
|
const state = randomString.randomString(8);
|
|
208
221
|
const verifier = randomString.randomString(43);
|
|
@@ -252,13 +265,13 @@ const useSocialAuth = ({ sessionTimeout, onSettled, onError, onFarcasterUrl, })
|
|
|
252
265
|
}
|
|
253
266
|
setIsProcessing(true);
|
|
254
267
|
if (!((_e = providersWaitingOauthMessage.current) === null || _e === void 0 ? void 0 : _e[provider])) {
|
|
255
|
-
handleError(types.SocialOAuthErrorCode.SESSION_TIMEOUT, `Connecting ${provider} account session timeout
|
|
268
|
+
handleError(provider, types.SocialOAuthErrorCode.SESSION_TIMEOUT, `Connecting ${provider} account session timeout.`, { raiseAuthFailure: authMode === 'signin' });
|
|
256
269
|
return;
|
|
257
270
|
}
|
|
258
271
|
clearListeners();
|
|
259
272
|
const { code, error, state: authState } = message;
|
|
260
273
|
if (error && error !== 'undefined') {
|
|
261
|
-
handleError(types.SocialOAuthErrorCode.OAUTH_ERROR, `Failed to connect ${provider} social account: ${error}
|
|
274
|
+
handleError(provider, types.SocialOAuthErrorCode.OAUTH_ERROR, `Failed to connect ${provider} social account: ${error}`, { raiseAuthFailure: authMode === 'signin' });
|
|
262
275
|
return;
|
|
263
276
|
}
|
|
264
277
|
// check that the state we receive from message is the same state we calculated earlier
|
|
@@ -266,11 +279,11 @@ const useSocialAuth = ({ sessionTimeout, onSettled, onError, onFarcasterUrl, })
|
|
|
266
279
|
// this state check is used only by providers with an open window opener reference (eg, not twitter)
|
|
267
280
|
if (!providersWithoutWindowOpenerRefence.includes(provider) &&
|
|
268
281
|
state !== authState) {
|
|
269
|
-
handleError(types.SocialOAuthErrorCode.OAUTH_ERROR, `Failed to connect ${provider} social account: Invalid random state
|
|
282
|
+
handleError(provider, types.SocialOAuthErrorCode.OAUTH_ERROR, `Failed to connect ${provider} social account: Invalid random state`, { raiseAuthFailure: authMode === 'signin' });
|
|
270
283
|
return;
|
|
271
284
|
}
|
|
272
285
|
if (!code) {
|
|
273
|
-
handleError(types.SocialOAuthErrorCode.NO_AUTH_CODE, `Failed to connect ${provider} social account: no authorization code
|
|
286
|
+
handleError(provider, types.SocialOAuthErrorCode.NO_AUTH_CODE, `Failed to connect ${provider} social account: no authorization code`, { raiseAuthFailure: authMode === 'signin' });
|
|
274
287
|
return;
|
|
275
288
|
}
|
|
276
289
|
if (authMode === 'signin') {
|
|
@@ -294,7 +307,7 @@ const useSocialAuth = ({ sessionTimeout, onSettled, onError, onFarcasterUrl, })
|
|
|
294
307
|
});
|
|
295
308
|
const loginUrl = getOauthLoginUrl.getOauthLoginUrl((_b = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.providers) !== null && _b !== void 0 ? _b : [], provider);
|
|
296
309
|
if (!loginUrl) {
|
|
297
|
-
handleError(types.SocialOAuthErrorCode.NO_OAUTH_URL, `Failed to get login url to connect social account: ${provider}
|
|
310
|
+
handleError(provider, types.SocialOAuthErrorCode.NO_OAUTH_URL, `Failed to get login url to connect social account: ${provider}`, { raiseAuthFailure: authMode === 'signin' });
|
|
298
311
|
return;
|
|
299
312
|
}
|
|
300
313
|
if (!((_c = providersWaitingOauthMessage.current) === null || _c === void 0 ? void 0 : _c[provider])) {
|
|
@@ -327,8 +340,7 @@ const useSocialAuth = ({ sessionTimeout, onSettled, onError, onFarcasterUrl, })
|
|
|
327
340
|
setIsProcessing(false);
|
|
328
341
|
// user didn't complete oauth
|
|
329
342
|
if ((_a = providersWaitingOauthMessage.current) === null || _a === void 0 ? void 0 : _a[provider]) {
|
|
330
|
-
|
|
331
|
-
onSettled === null || onSettled === void 0 ? void 0 : onSettled();
|
|
343
|
+
onFailed(provider, 'user-cancelled');
|
|
332
344
|
}
|
|
333
345
|
}, 2000);
|
|
334
346
|
}
|
|
@@ -350,7 +362,7 @@ const useSocialAuth = ({ sessionTimeout, onSettled, onError, onFarcasterUrl, })
|
|
|
350
362
|
// clear all states/listeners, assuming user closed the window before completing oauth
|
|
351
363
|
if ((_f = providersWaitingOauthMessage.current) === null || _f === void 0 ? void 0 : _f[provider]) {
|
|
352
364
|
clearListeners();
|
|
353
|
-
handleError(types.SocialOAuthErrorCode.OAUTH_WINDOW_TIMEOUT, `Connecting ${provider} account window timeout
|
|
365
|
+
handleError(provider, types.SocialOAuthErrorCode.OAUTH_WINDOW_TIMEOUT, `Connecting ${provider} account window timeout.`, { raiseAuthFailure: authMode === 'signin' });
|
|
354
366
|
}
|
|
355
367
|
clearInterval(authWindowInterval.current);
|
|
356
368
|
setIsProcessing(false);
|
|
@@ -368,7 +380,7 @@ const useSocialAuth = ({ sessionTimeout, onSettled, onError, onFarcasterUrl, })
|
|
|
368
380
|
siweUri: window.location.origin,
|
|
369
381
|
});
|
|
370
382
|
if (!(data === null || data === void 0 ? void 0 : data.url) || !(data === null || data === void 0 ? void 0 : data.channelToken)) {
|
|
371
|
-
handleError(types.SocialOAuthErrorCode.GENERAL_ERROR, "Farcaster didn't return a valid url.");
|
|
383
|
+
handleError(sdkApiCore.ProviderEnum.Farcaster, types.SocialOAuthErrorCode.GENERAL_ERROR, "Farcaster didn't return a valid url.", { raiseAuthFailure: authMode === 'signin' });
|
|
372
384
|
return;
|
|
373
385
|
}
|
|
374
386
|
// If on mobile, we want to redirect to the Warpcast app.
|
|
@@ -393,7 +405,7 @@ const useSocialAuth = ({ sessionTimeout, onSettled, onError, onFarcasterUrl, })
|
|
|
393
405
|
!(status === null || status === void 0 ? void 0 : status.custody) ||
|
|
394
406
|
!(status === null || status === void 0 ? void 0 : status.signature) ||
|
|
395
407
|
!(status === null || status === void 0 ? void 0 : status.nonce)) {
|
|
396
|
-
handleError(types.SocialOAuthErrorCode.GENERAL_ERROR, "Farcaster didn't return valid data.");
|
|
408
|
+
handleError(sdkApiCore.ProviderEnum.Farcaster, types.SocialOAuthErrorCode.GENERAL_ERROR, "Farcaster didn't return valid data.", { raiseAuthFailure: authMode === 'signin' });
|
|
397
409
|
return;
|
|
398
410
|
}
|
|
399
411
|
const { custody: address, message, signature, nonce } = status;
|
|
@@ -408,7 +420,7 @@ const useSocialAuth = ({ sessionTimeout, onSettled, onError, onFarcasterUrl, })
|
|
|
408
420
|
yield signInAccount(sdkApiCore.ProviderEnum.Farcaster, apiCall);
|
|
409
421
|
}
|
|
410
422
|
else {
|
|
411
|
-
handleError(types.SocialOAuthErrorCode.GENERAL_ERROR, 'Linking with Farcaster is not supported at the moment.');
|
|
423
|
+
handleError(sdkApiCore.ProviderEnum.Farcaster, types.SocialOAuthErrorCode.GENERAL_ERROR, 'Linking with Farcaster is not supported at the moment.', { raiseAuthFailure: true });
|
|
412
424
|
}
|
|
413
425
|
setIsProcessing(false);
|
|
414
426
|
});
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import { ProviderEnum } from '@dynamic-labs/sdk-api-core';
|
|
3
3
|
import { SocialOAuthError, SocialOAuthErrorCode } from '@dynamic-labs/types';
|
|
4
|
-
type SocialAuthMode = 'link' | 'signin';
|
|
4
|
+
type SocialAuthMode = 'link' | 'signin' | 'unlink';
|
|
5
5
|
type UseSocialAuthProps = {
|
|
6
6
|
sessionTimeout: number;
|
|
7
7
|
onSettled?: () => void;
|
|
@@ -9,7 +9,7 @@ type UseSocialAuthProps = {
|
|
|
9
9
|
onFarcasterUrl?: (url: string) => void;
|
|
10
10
|
};
|
|
11
11
|
export declare const useSocialAuth: ({ sessionTimeout, onSettled, onError, onFarcasterUrl, }: UseSocialAuthProps) => {
|
|
12
|
-
readonly checkValidProvider: (provider: ProviderEnum) => boolean;
|
|
12
|
+
readonly checkValidProvider: (provider: ProviderEnum, authMode: SocialAuthMode) => boolean;
|
|
13
13
|
readonly connectSocialAccount: ({ authMode, provider, validator, captchaToken, }: {
|
|
14
14
|
authMode: SocialAuthMode;
|
|
15
15
|
provider: ProviderEnum;
|
|
@@ -17,7 +17,9 @@ export declare const useSocialAuth: ({ sessionTimeout, onSettled, onError, onFar
|
|
|
17
17
|
captchaToken?: string;
|
|
18
18
|
}) => Promise<void>;
|
|
19
19
|
readonly error: SocialOAuthError | undefined;
|
|
20
|
-
readonly handleError: (code: SocialOAuthErrorCode, message: string
|
|
20
|
+
readonly handleError: (provider: ProviderEnum | undefined, code: SocialOAuthErrorCode, message: string, options?: {
|
|
21
|
+
raiseAuthFailure?: boolean | undefined;
|
|
22
|
+
} | undefined) => void;
|
|
21
23
|
readonly isProcessing: boolean;
|
|
22
24
|
readonly setError: import("react").Dispatch<import("react").SetStateAction<SocialOAuthError | undefined>>;
|
|
23
25
|
readonly setIsProcessing: import("react").Dispatch<import("react").SetStateAction<boolean>>;
|
|
@@ -15,7 +15,7 @@ import '../../constants/colors.js';
|
|
|
15
15
|
import '../../constants/values.js';
|
|
16
16
|
import '../../../shared/utils/classes/storage/localStorage.js';
|
|
17
17
|
import '../../../shared/consts/index.js';
|
|
18
|
-
import '../../../events/dynamicEvents.js';
|
|
18
|
+
import { dynamicEvents } from '../../../events/dynamicEvents.js';
|
|
19
19
|
import '../../../context/CaptchaContext/CaptchaContext.js';
|
|
20
20
|
import { useErrorContext } from '../../../context/ErrorContext/ErrorContext.js';
|
|
21
21
|
import { digestSHA256 } from '../../functions/digestSHA256/digestSHA256.js';
|
|
@@ -116,13 +116,23 @@ const useSocialAuth = ({ sessionTimeout, onSettled, onError, onFarcasterUrl, })
|
|
|
116
116
|
setError(undefined);
|
|
117
117
|
setContextError(undefined);
|
|
118
118
|
};
|
|
119
|
-
const
|
|
119
|
+
const onFailed = (provider, reason, options) => {
|
|
120
|
+
onError === null || onError === void 0 ? void 0 : onError();
|
|
121
|
+
onSettled === null || onSettled === void 0 ? void 0 : onSettled();
|
|
122
|
+
if (provider && (options === null || options === void 0 ? void 0 : options.raiseAuthFailure))
|
|
123
|
+
dynamicEvents.emit('authFailure', {
|
|
124
|
+
option: provider,
|
|
125
|
+
provider,
|
|
126
|
+
type: 'social',
|
|
127
|
+
}, reason);
|
|
128
|
+
};
|
|
129
|
+
const handleError = (provider, code, message, options) => {
|
|
130
|
+
const error = { code, message };
|
|
120
131
|
logger.error(message);
|
|
121
132
|
setIsProcessing(false);
|
|
122
|
-
setError(
|
|
133
|
+
setError(error);
|
|
123
134
|
setErrorMessage(code);
|
|
124
|
-
|
|
125
|
-
onSettled === null || onSettled === void 0 ? void 0 : onSettled();
|
|
135
|
+
onFailed(provider, { error }, options);
|
|
126
136
|
};
|
|
127
137
|
const poolOauthResult = (provider, state) => __awaiter(void 0, void 0, void 0, function* () {
|
|
128
138
|
if (!shouldPool.current) {
|
|
@@ -144,13 +154,13 @@ const useSocialAuth = ({ sessionTimeout, onSettled, onError, onFarcasterUrl, })
|
|
|
144
154
|
};
|
|
145
155
|
window.postMessage(authMessage, '*');
|
|
146
156
|
});
|
|
147
|
-
const checkValidProvider = (provider) => {
|
|
157
|
+
const checkValidProvider = (provider, authMode) => {
|
|
148
158
|
if (!provider) {
|
|
149
|
-
handleError(SocialOAuthErrorCode.NO_PROVIDER, 'Provider is required');
|
|
159
|
+
handleError(provider, SocialOAuthErrorCode.NO_PROVIDER, 'Provider is required', { raiseAuthFailure: authMode === 'signin' });
|
|
150
160
|
return false;
|
|
151
161
|
}
|
|
152
162
|
if (!socialProviders.includes(provider)) {
|
|
153
|
-
handleError(SocialOAuthErrorCode.INVALID_PROVIDER, `Invalid social provider. Valid providers are: ${socialProviders.join(', ')}
|
|
163
|
+
handleError(provider, SocialOAuthErrorCode.INVALID_PROVIDER, `Invalid social provider. Valid providers are: ${socialProviders.join(', ')}`, { raiseAuthFailure: authMode === 'signin' });
|
|
154
164
|
return false;
|
|
155
165
|
}
|
|
156
166
|
return true;
|
|
@@ -159,7 +169,7 @@ const useSocialAuth = ({ sessionTimeout, onSettled, onError, onFarcasterUrl, })
|
|
|
159
169
|
try {
|
|
160
170
|
const response = yield apiCall();
|
|
161
171
|
if (!response) {
|
|
162
|
-
handleError(SocialOAuthErrorCode.VERIFICATION_ERROR, `Failed to link social account: ${provider}
|
|
172
|
+
handleError(provider, SocialOAuthErrorCode.VERIFICATION_ERROR, `Failed to link social account: ${provider}`, { raiseAuthFailure: false });
|
|
163
173
|
return;
|
|
164
174
|
}
|
|
165
175
|
yield updateUserProfileByJWT(response.jwt, response.minifiedJwt);
|
|
@@ -167,13 +177,13 @@ const useSocialAuth = ({ sessionTimeout, onSettled, onError, onFarcasterUrl, })
|
|
|
167
177
|
}
|
|
168
178
|
catch (error) {
|
|
169
179
|
if (error instanceof SocialAccountAlreadyExistsError) {
|
|
170
|
-
handleError(SocialOAuthErrorCode.ACCOUNT_ALREADY_LINKED_TO_DIFFERENT_PROFILE, `Social account already linked to a different profile: ${provider}
|
|
180
|
+
handleError(provider, SocialOAuthErrorCode.ACCOUNT_ALREADY_LINKED_TO_DIFFERENT_PROFILE, `Social account already linked to a different profile: ${provider}`, { raiseAuthFailure: false });
|
|
171
181
|
}
|
|
172
182
|
}
|
|
173
183
|
});
|
|
174
184
|
const signInAccount = (provider, apiCall) => __awaiter(void 0, void 0, void 0, function* () {
|
|
175
185
|
yield initAuth({
|
|
176
|
-
onError: () => handleError(SocialOAuthErrorCode.SIGNIN_ERROR, `Failed to sign-in with social account: ${provider}
|
|
186
|
+
onError: () => handleError(provider, SocialOAuthErrorCode.SIGNIN_ERROR, `Failed to sign-in with social account: ${provider}`, { raiseAuthFailure: true }),
|
|
177
187
|
onSettled,
|
|
178
188
|
options: { provider },
|
|
179
189
|
verifyFunction: () => apiCall(),
|
|
@@ -188,17 +198,20 @@ const useSocialAuth = ({ sessionTimeout, onSettled, onError, onFarcasterUrl, })
|
|
|
188
198
|
logger.error('Auth mode is required. Please use either "link" or "signin"');
|
|
189
199
|
return;
|
|
190
200
|
}
|
|
191
|
-
if (!checkValidProvider(provider)) {
|
|
201
|
+
if (!checkValidProvider(provider, authMode)) {
|
|
192
202
|
return;
|
|
193
203
|
}
|
|
194
204
|
// invalid connect request
|
|
195
205
|
if (validator && !validator(provider)) {
|
|
196
206
|
return;
|
|
197
207
|
}
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
208
|
+
dynamicEvents.emit('authInit', {
|
|
209
|
+
option: provider,
|
|
210
|
+
provider,
|
|
211
|
+
type: 'social',
|
|
212
|
+
});
|
|
213
|
+
if (provider === ProviderEnum.Farcaster)
|
|
214
|
+
return connectWithFarcaster(authMode);
|
|
202
215
|
const authWindow = window.open('', '_blank', 'width=500,height=600');
|
|
203
216
|
const state = randomString(8);
|
|
204
217
|
const verifier = randomString(43);
|
|
@@ -248,13 +261,13 @@ const useSocialAuth = ({ sessionTimeout, onSettled, onError, onFarcasterUrl, })
|
|
|
248
261
|
}
|
|
249
262
|
setIsProcessing(true);
|
|
250
263
|
if (!((_e = providersWaitingOauthMessage.current) === null || _e === void 0 ? void 0 : _e[provider])) {
|
|
251
|
-
handleError(SocialOAuthErrorCode.SESSION_TIMEOUT, `Connecting ${provider} account session timeout
|
|
264
|
+
handleError(provider, SocialOAuthErrorCode.SESSION_TIMEOUT, `Connecting ${provider} account session timeout.`, { raiseAuthFailure: authMode === 'signin' });
|
|
252
265
|
return;
|
|
253
266
|
}
|
|
254
267
|
clearListeners();
|
|
255
268
|
const { code, error, state: authState } = message;
|
|
256
269
|
if (error && error !== 'undefined') {
|
|
257
|
-
handleError(SocialOAuthErrorCode.OAUTH_ERROR, `Failed to connect ${provider} social account: ${error}
|
|
270
|
+
handleError(provider, SocialOAuthErrorCode.OAUTH_ERROR, `Failed to connect ${provider} social account: ${error}`, { raiseAuthFailure: authMode === 'signin' });
|
|
258
271
|
return;
|
|
259
272
|
}
|
|
260
273
|
// check that the state we receive from message is the same state we calculated earlier
|
|
@@ -262,11 +275,11 @@ const useSocialAuth = ({ sessionTimeout, onSettled, onError, onFarcasterUrl, })
|
|
|
262
275
|
// this state check is used only by providers with an open window opener reference (eg, not twitter)
|
|
263
276
|
if (!providersWithoutWindowOpenerRefence.includes(provider) &&
|
|
264
277
|
state !== authState) {
|
|
265
|
-
handleError(SocialOAuthErrorCode.OAUTH_ERROR, `Failed to connect ${provider} social account: Invalid random state
|
|
278
|
+
handleError(provider, SocialOAuthErrorCode.OAUTH_ERROR, `Failed to connect ${provider} social account: Invalid random state`, { raiseAuthFailure: authMode === 'signin' });
|
|
266
279
|
return;
|
|
267
280
|
}
|
|
268
281
|
if (!code) {
|
|
269
|
-
handleError(SocialOAuthErrorCode.NO_AUTH_CODE, `Failed to connect ${provider} social account: no authorization code
|
|
282
|
+
handleError(provider, SocialOAuthErrorCode.NO_AUTH_CODE, `Failed to connect ${provider} social account: no authorization code`, { raiseAuthFailure: authMode === 'signin' });
|
|
270
283
|
return;
|
|
271
284
|
}
|
|
272
285
|
if (authMode === 'signin') {
|
|
@@ -290,7 +303,7 @@ const useSocialAuth = ({ sessionTimeout, onSettled, onError, onFarcasterUrl, })
|
|
|
290
303
|
});
|
|
291
304
|
const loginUrl = getOauthLoginUrl((_b = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.providers) !== null && _b !== void 0 ? _b : [], provider);
|
|
292
305
|
if (!loginUrl) {
|
|
293
|
-
handleError(SocialOAuthErrorCode.NO_OAUTH_URL, `Failed to get login url to connect social account: ${provider}
|
|
306
|
+
handleError(provider, SocialOAuthErrorCode.NO_OAUTH_URL, `Failed to get login url to connect social account: ${provider}`, { raiseAuthFailure: authMode === 'signin' });
|
|
294
307
|
return;
|
|
295
308
|
}
|
|
296
309
|
if (!((_c = providersWaitingOauthMessage.current) === null || _c === void 0 ? void 0 : _c[provider])) {
|
|
@@ -323,8 +336,7 @@ const useSocialAuth = ({ sessionTimeout, onSettled, onError, onFarcasterUrl, })
|
|
|
323
336
|
setIsProcessing(false);
|
|
324
337
|
// user didn't complete oauth
|
|
325
338
|
if ((_a = providersWaitingOauthMessage.current) === null || _a === void 0 ? void 0 : _a[provider]) {
|
|
326
|
-
|
|
327
|
-
onSettled === null || onSettled === void 0 ? void 0 : onSettled();
|
|
339
|
+
onFailed(provider, 'user-cancelled');
|
|
328
340
|
}
|
|
329
341
|
}, 2000);
|
|
330
342
|
}
|
|
@@ -346,7 +358,7 @@ const useSocialAuth = ({ sessionTimeout, onSettled, onError, onFarcasterUrl, })
|
|
|
346
358
|
// clear all states/listeners, assuming user closed the window before completing oauth
|
|
347
359
|
if ((_f = providersWaitingOauthMessage.current) === null || _f === void 0 ? void 0 : _f[provider]) {
|
|
348
360
|
clearListeners();
|
|
349
|
-
handleError(SocialOAuthErrorCode.OAUTH_WINDOW_TIMEOUT, `Connecting ${provider} account window timeout
|
|
361
|
+
handleError(provider, SocialOAuthErrorCode.OAUTH_WINDOW_TIMEOUT, `Connecting ${provider} account window timeout.`, { raiseAuthFailure: authMode === 'signin' });
|
|
350
362
|
}
|
|
351
363
|
clearInterval(authWindowInterval.current);
|
|
352
364
|
setIsProcessing(false);
|
|
@@ -364,7 +376,7 @@ const useSocialAuth = ({ sessionTimeout, onSettled, onError, onFarcasterUrl, })
|
|
|
364
376
|
siweUri: window.location.origin,
|
|
365
377
|
});
|
|
366
378
|
if (!(data === null || data === void 0 ? void 0 : data.url) || !(data === null || data === void 0 ? void 0 : data.channelToken)) {
|
|
367
|
-
handleError(SocialOAuthErrorCode.GENERAL_ERROR, "Farcaster didn't return a valid url.");
|
|
379
|
+
handleError(ProviderEnum.Farcaster, SocialOAuthErrorCode.GENERAL_ERROR, "Farcaster didn't return a valid url.", { raiseAuthFailure: authMode === 'signin' });
|
|
368
380
|
return;
|
|
369
381
|
}
|
|
370
382
|
// If on mobile, we want to redirect to the Warpcast app.
|
|
@@ -389,7 +401,7 @@ const useSocialAuth = ({ sessionTimeout, onSettled, onError, onFarcasterUrl, })
|
|
|
389
401
|
!(status === null || status === void 0 ? void 0 : status.custody) ||
|
|
390
402
|
!(status === null || status === void 0 ? void 0 : status.signature) ||
|
|
391
403
|
!(status === null || status === void 0 ? void 0 : status.nonce)) {
|
|
392
|
-
handleError(SocialOAuthErrorCode.GENERAL_ERROR, "Farcaster didn't return valid data.");
|
|
404
|
+
handleError(ProviderEnum.Farcaster, SocialOAuthErrorCode.GENERAL_ERROR, "Farcaster didn't return valid data.", { raiseAuthFailure: authMode === 'signin' });
|
|
393
405
|
return;
|
|
394
406
|
}
|
|
395
407
|
const { custody: address, message, signature, nonce } = status;
|
|
@@ -404,7 +416,7 @@ const useSocialAuth = ({ sessionTimeout, onSettled, onError, onFarcasterUrl, })
|
|
|
404
416
|
yield signInAccount(ProviderEnum.Farcaster, apiCall);
|
|
405
417
|
}
|
|
406
418
|
else {
|
|
407
|
-
handleError(SocialOAuthErrorCode.GENERAL_ERROR, 'Linking with Farcaster is not supported at the moment.');
|
|
419
|
+
handleError(ProviderEnum.Farcaster, SocialOAuthErrorCode.GENERAL_ERROR, 'Linking with Farcaster is not supported at the moment.', { raiseAuthFailure: true });
|
|
408
420
|
}
|
|
409
421
|
setIsProcessing(false);
|
|
410
422
|
});
|
|
@@ -5,6 +5,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
5
5
|
|
|
6
6
|
var _tslib = require('../../../../../_virtual/_tslib.cjs');
|
|
7
7
|
var utils = require('@dynamic-labs/utils');
|
|
8
|
+
var AccountExistsContext = require('../../../context/AccountExistsContext/AccountExistsContext.cjs');
|
|
8
9
|
require('react');
|
|
9
10
|
require('../../../context/DynamicContext/DynamicContext.cjs');
|
|
10
11
|
require('@dynamic-labs/sdk-api-core');
|
|
@@ -14,27 +15,25 @@ require('@dynamic-labs/wallet-connector-core');
|
|
|
14
15
|
require('react/jsx-runtime');
|
|
15
16
|
var ViewContext = require('../../../context/ViewContext/ViewContext.cjs');
|
|
16
17
|
require('@dynamic-labs/wallet-book');
|
|
17
|
-
var localStorage$1 = require('../../constants/localStorage.cjs');
|
|
18
18
|
require('../../constants/colors.cjs');
|
|
19
19
|
require('../../constants/values.cjs');
|
|
20
|
-
|
|
20
|
+
require('../../../shared/utils/classes/storage/localStorage.cjs');
|
|
21
21
|
require('../../../shared/consts/index.cjs');
|
|
22
22
|
require('../../../events/dynamicEvents.cjs');
|
|
23
23
|
require('../../../context/CaptchaContext/CaptchaContext.cjs');
|
|
24
24
|
var ErrorContext = require('../../../context/ErrorContext/ErrorContext.cjs');
|
|
25
|
-
var createUserProfile = require('../../functions/createUserProfile/createUserProfile.cjs');
|
|
26
25
|
require('@dynamic-labs/multi-wallet');
|
|
27
26
|
require('react-international-phone');
|
|
28
27
|
require('viem');
|
|
29
28
|
require('viem/chains');
|
|
30
29
|
require('../../../config/ApiEndpoint.cjs');
|
|
30
|
+
var mfa = require('../../../data/api/mfa/mfa.cjs');
|
|
31
31
|
require('../../../locale/locale.cjs');
|
|
32
|
-
require('
|
|
32
|
+
var storeAuthTokenAndUser = require('../../../store/utils/storeAuthTokenAndUser/storeAuthTokenAndUser.cjs');
|
|
33
|
+
var updateJWTAndCreateUserProfile = require('../../functions/updateJWTAndCreateUserProfile/updateJWTAndCreateUserProfile.cjs');
|
|
33
34
|
require('../../../context/AccessDeniedContext/AccessDeniedContext.cjs');
|
|
34
|
-
var AccountExistsContext = require('../../../context/AccountExistsContext/AccountExistsContext.cjs');
|
|
35
35
|
require('../../../context/UserWalletsContext/UserWalletsContext.cjs');
|
|
36
36
|
var VerificationContext = require('../../../context/VerificationContext/VerificationContext.cjs');
|
|
37
|
-
var useCreateUserProfileByJWTCallback = require('../useCreateUserProfileByJWTCallback/useCreateUserProfileByJWTCallback.cjs');
|
|
38
37
|
require('react-dom');
|
|
39
38
|
var useEmbeddedWallet = require('../useEmbeddedWallet/useEmbeddedWallet.cjs');
|
|
40
39
|
require('../../../context/WalletContext/WalletContext.cjs');
|
|
@@ -47,6 +46,7 @@ require('../../../context/MockContext/MockContext.cjs');
|
|
|
47
46
|
require('../../../views/CollectUserDataView/useFields.cjs');
|
|
48
47
|
require('../useUserUpdateRequest/useUpdateUser/useUpdateUser.cjs');
|
|
49
48
|
require('../../../context/UserFieldEditorContext/UserFieldEditorContext.cjs');
|
|
49
|
+
require('@dynamic-labs/store');
|
|
50
50
|
require('@dynamic-labs/rpc-providers');
|
|
51
51
|
require('react-i18next');
|
|
52
52
|
require('../../../components/Alert/Alert.cjs');
|
|
@@ -84,39 +84,49 @@ var useInternalDynamicContext = require('../../../context/DynamicContext/useDyna
|
|
|
84
84
|
|
|
85
85
|
const sleepToShowSuccessMessage = () => utils.sleep(1500);
|
|
86
86
|
const useUserAuth = ({ authMethod, }) => {
|
|
87
|
-
const { handleLogOut,
|
|
87
|
+
const { handleLogOut, setShowAuthFlow, setCallback, setMultiWalletWidgetState, environmentId, } = useInternalDynamicContext.useInternalDynamicContext();
|
|
88
88
|
const { view, setView, goToInitialView } = ViewContext.useViewContext();
|
|
89
89
|
const { setLoading } = LoadingContext.useLoadingContext();
|
|
90
90
|
const { setErrorMessage, setError } = ErrorContext.useErrorContext();
|
|
91
91
|
const { setExistentAccountData } = AccountExistsContext.useAccountExistsContext();
|
|
92
|
-
const
|
|
93
|
-
const { createUserProfileByJWT } = useCreateUserProfileByJWTCallback.useCreateUserProfileByJWTCallback();
|
|
92
|
+
const handleVerifiedUser = useHandleVerifiedUser.useHandleVerifiedUser();
|
|
94
93
|
const { displayedDestination: formattedPhone } = VerificationContext.useVerification();
|
|
95
94
|
const { shouldAutoCreateEmbeddedWallet } = useEmbeddedWallet.useEmbeddedWallet();
|
|
96
95
|
const initAuth = (_a) => _tslib.__awaiter(void 0, [_a], void 0, function* ({ isSignIn = true, verifyFunction, onVerifySuccess, onSettled, onError, showSuccessMessage = false, skipDefaultErrorHandling = false, }) {
|
|
97
|
-
var _b;
|
|
96
|
+
var _b, _c;
|
|
98
97
|
logger.logger.debug('initAuth', { authMethod, isSignIn });
|
|
99
98
|
try {
|
|
100
99
|
const { jwt, minifiedJwt, user } = (yield verifyFunction()) || {};
|
|
101
|
-
if (!
|
|
100
|
+
if (!user) {
|
|
102
101
|
yield cancelAuth();
|
|
103
|
-
throw new utils.DynamicError('No
|
|
102
|
+
throw new utils.DynamicError('No user returned from verify function');
|
|
104
103
|
}
|
|
105
|
-
const userProfile =
|
|
104
|
+
const userProfile = storeAuthTokenAndUser.storeAuthTokenAndUser({ jwt, minifiedJwt, user });
|
|
106
105
|
onVerifySuccess === null || onVerifySuccess === void 0 ? void 0 : onVerifySuccess(userProfile);
|
|
107
106
|
if (isSignIn && ((_b = userProfile.missingFields) === null || _b === void 0 ? void 0 : _b.length)) {
|
|
108
|
-
yield handleOnboarding(
|
|
107
|
+
yield handleOnboarding(showSuccessMessage, onSettled);
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
if ((_c = user.scope) === null || _c === void 0 ? void 0 : _c.includes('requiresAdditionalAuth')) {
|
|
111
|
+
// this is needed because useMfa relies on the jwt being available in LS
|
|
112
|
+
// this function only stores the jwt and creates the user, but does not set
|
|
113
|
+
// the user state
|
|
114
|
+
updateJWTAndCreateUserProfile.updateJWTAndCreateUserProfile(jwt, minifiedJwt);
|
|
115
|
+
const devices = yield mfa.getUserMfaDevices({ environmentId });
|
|
116
|
+
if (devices.length === 0) {
|
|
117
|
+
setView('mfa-choose-device');
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
setView('mfa-verification');
|
|
121
|
+
}
|
|
109
122
|
return;
|
|
110
123
|
}
|
|
111
124
|
setMultiWalletWidgetState('idle');
|
|
112
|
-
|
|
113
|
-
localStorage.LocalStorage.removeFromLS(localStorage$1.AUTH_ONBOARDING_TOKEN);
|
|
114
|
-
yield handleVerifiedUserWithUser(userProfile);
|
|
125
|
+
yield handleVerifiedUser(userProfile);
|
|
115
126
|
if (showSuccessMessage) {
|
|
116
127
|
// this timeout is set to make sure that the user will see success message
|
|
117
128
|
yield sleepToShowSuccessMessage();
|
|
118
129
|
}
|
|
119
|
-
yield createUserProfileByJWT(jwt, minifiedJwt);
|
|
120
130
|
if (isSignIn) {
|
|
121
131
|
setCallback('authSuccess');
|
|
122
132
|
}
|
|
@@ -141,9 +151,7 @@ const useUserAuth = ({ authMethod, }) => {
|
|
|
141
151
|
onSettled === null || onSettled === void 0 ? void 0 : onSettled();
|
|
142
152
|
}
|
|
143
153
|
});
|
|
144
|
-
const handleOnboarding = (
|
|
145
|
-
setOnboardingOnlyJwt(jwt);
|
|
146
|
-
localStorage.LocalStorage.setToLS(localStorage$1.AUTH_ONBOARDING_TOKEN, jwt, true);
|
|
154
|
+
const handleOnboarding = (showSuccessMessage, onSettled) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
|
|
147
155
|
if (showSuccessMessage) {
|
|
148
156
|
yield sleepToShowSuccessMessage();
|
|
149
157
|
}
|
|
@@ -184,7 +192,7 @@ const useUserAuth = ({ authMethod, }) => {
|
|
|
184
192
|
// Handle the case where the user has already an account with the email
|
|
185
193
|
if (error instanceof utils.UserHasAccountWithEmailError) {
|
|
186
194
|
setView('merge-user-accounts-with-same-email', {
|
|
187
|
-
returnToView: options.isEmailRecoveryFlow
|
|
195
|
+
returnToView: 'isEmailRecoveryFlow' in options && options.isEmailRecoveryFlow
|
|
188
196
|
? 'passkey-recovery-add-email'
|
|
189
197
|
: undefined,
|
|
190
198
|
});
|
|
@@ -201,7 +209,7 @@ const useUserAuth = ({ authMethod, }) => {
|
|
|
201
209
|
setError(error.message);
|
|
202
210
|
}
|
|
203
211
|
};
|
|
204
|
-
const handleVerifyMissingFields = (
|
|
212
|
+
const handleVerifyMissingFields = (_d) => _tslib.__awaiter(void 0, [_d], void 0, function* ({ missingFields, isEmailVerificationRequired, isSmsVerificationRequired, }) {
|
|
205
213
|
if (isEmailVerificationRequired &&
|
|
206
214
|
missingFields.find((field) => field.name === 'email')) {
|
|
207
215
|
setView('verify-email');
|
|
@@ -214,13 +222,16 @@ const useUserAuth = ({ authMethod, }) => {
|
|
|
214
222
|
}
|
|
215
223
|
setView(view.type);
|
|
216
224
|
});
|
|
217
|
-
const completeAuth = (
|
|
225
|
+
const completeAuth = (_e) => _tslib.__awaiter(void 0, [_e], void 0, function* ({ completeSignInFlow, updateJwtFunction, onValidUpdatedJwt, options = {}, }) {
|
|
218
226
|
logger.logger.debug('completeAuth', { authMethod });
|
|
219
227
|
try {
|
|
220
228
|
const { updateUserProfileResponse, isSmsVerificationRequired, isEmailVerificationRequired, missingFields, } = yield updateJwtFunction();
|
|
221
229
|
onValidUpdatedJwt === null || onValidUpdatedJwt === void 0 ? void 0 : onValidUpdatedJwt();
|
|
222
|
-
|
|
223
|
-
|
|
230
|
+
const updatedUser = storeAuthTokenAndUser.storeAuthTokenAndUser({
|
|
231
|
+
jwt: updateUserProfileResponse.jwt,
|
|
232
|
+
minifiedJwt: updateUserProfileResponse.minifiedJwt,
|
|
233
|
+
user: updateUserProfileResponse.user,
|
|
234
|
+
});
|
|
224
235
|
if (missingFields.length > 0) {
|
|
225
236
|
yield handleVerifyMissingFields({
|
|
226
237
|
isEmailVerificationRequired,
|
|
@@ -229,13 +240,8 @@ const useUserAuth = ({ authMethod, }) => {
|
|
|
229
240
|
});
|
|
230
241
|
return;
|
|
231
242
|
}
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
yield handleVerifiedUserWithJWT(updateUserProfileResponse.jwt);
|
|
235
|
-
setOnboardingOnlyJwt(undefined);
|
|
236
|
-
localStorage.LocalStorage.removeFromLS(localStorage$1.AUTH_ONBOARDING_TOKEN);
|
|
237
|
-
setCallback('authSuccess');
|
|
238
|
-
}
|
|
243
|
+
yield handleVerifiedUser(updatedUser);
|
|
244
|
+
setCallback('authSuccess');
|
|
239
245
|
if (completeSignInFlow) {
|
|
240
246
|
const shouldReturn = yield completeSignInFlow(updateUserProfileResponse);
|
|
241
247
|
if (shouldReturn) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { CompleteUserAuthProps,
|
|
2
|
-
export declare const useUserAuth: <T extends keyof AuthOptions>({ authMethod, }: UseUserAuthProps<T>) => {
|
|
1
|
+
import { CompleteUserAuthProps, InitUserAuthProps, UseUserAuthProps } from './useUserAuth.types';
|
|
2
|
+
export declare const useUserAuth: <T extends keyof import("@dynamic-labs/types").AuthOptions>({ authMethod, }: UseUserAuthProps<T>) => {
|
|
3
3
|
cancelAuth: () => Promise<void>;
|
|
4
4
|
completeAuth: ({ completeSignInFlow, updateJwtFunction, onValidUpdatedJwt, options, }: CompleteUserAuthProps<T>) => Promise<void>;
|
|
5
5
|
initAuth: ({ isSignIn, verifyFunction, onVerifySuccess, onSettled, onError, showSuccessMessage, skipDefaultErrorHandling, }: InitUserAuthProps<T>) => Promise<void>;
|