@dynamic-labs/sdk-react-core 3.1.0 → 3.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +16 -0
- package/package.cjs +1 -1
- package/package.js +1 -1
- package/package.json +11 -11
- package/src/lib/components/QRCode/QRCode.cjs +2 -2
- package/src/lib/components/QRCode/QRCode.js +2 -2
- package/src/lib/context/ViewContext/types/index.d.ts +1 -1
- package/src/lib/data/api/transactions/blockaid.cjs +23 -0
- package/src/lib/data/api/transactions/blockaid.js +19 -0
- package/src/lib/locale/en/translation.cjs +35 -1
- package/src/lib/locale/en/translation.d.ts +34 -0
- package/src/lib/locale/en/translation.js +35 -1
- package/src/lib/shared/assets/caution-triangle.cjs +54 -0
- package/src/lib/shared/assets/caution-triangle.js +30 -0
- package/src/lib/shared/assets/exclamation-circle.cjs +54 -0
- package/src/lib/shared/assets/exclamation-circle.js +30 -0
- package/src/lib/shared/assets/exclamation.cjs +52 -0
- package/src/lib/shared/assets/exclamation.js +28 -0
- package/src/lib/shared/assets/index.d.ts +5 -0
- package/src/lib/shared/assets/warning-orange.cjs +54 -0
- package/src/lib/shared/assets/warning-orange.js +30 -0
- package/src/lib/shared/assets/warning-red.cjs +54 -0
- package/src/lib/shared/assets/warning-red.js +30 -0
- package/src/lib/styles/index.shadow.cjs +1 -1
- package/src/lib/styles/index.shadow.js +1 -1
- package/src/lib/utils/hooks/useAuthLayoutChecks/useAuthLayoutChecks.cjs +1 -0
- package/src/lib/utils/hooks/useAuthLayoutChecks/useAuthLayoutChecks.js +1 -0
- package/src/lib/utils/hooks/useResetCookieLocalStorage/useResetCookieLocalStorage.cjs +8 -1
- package/src/lib/utils/hooks/useResetCookieLocalStorage/useResetCookieLocalStorage.js +8 -1
- package/src/lib/utils/hooks/useSocialAuth/useSocialAuth.cjs +148 -114
- package/src/lib/utils/hooks/useSocialAuth/useSocialAuth.js +151 -117
- package/src/lib/views/GlobalWalletMaliciousView/GlobalWalletMaliciousView.cjs +139 -0
- package/src/lib/views/GlobalWalletMaliciousView/GlobalWalletMaliciousView.d.ts +11 -0
- package/src/lib/views/GlobalWalletMaliciousView/GlobalWalletMaliciousView.js +134 -0
- package/src/lib/views/MfaChooseDeviceView/MfaChooseDeviceView.cjs +1 -1
- package/src/lib/views/MfaChooseDeviceView/MfaChooseDeviceView.js +1 -1
- package/src/lib/views/viewToComponentMap.cjs +2 -0
- package/src/lib/views/viewToComponentMap.d.ts +1 -0
- package/src/lib/views/viewToComponentMap.js +2 -0
- package/src/lib/widgets/DynamicWidget/views/GlobalWalletView/GlobalWalletView.cjs +31 -8
- package/src/lib/widgets/DynamicWidget/views/GlobalWalletView/GlobalWalletView.js +31 -8
|
@@ -145,6 +145,7 @@ const useAuthLayoutChecks = () => {
|
|
|
145
145
|
view.type !== 'wallet-claim-intro' &&
|
|
146
146
|
view.type !== 'passkey-recovery-add-email' &&
|
|
147
147
|
view.type !== 'global-wallet-confirm' &&
|
|
148
|
+
view.type !== 'global-wallet-malicious' &&
|
|
148
149
|
view.type !== 'global-wallet-info' &&
|
|
149
150
|
view.type !== 'mfa-choose-device' &&
|
|
150
151
|
view.type !== 'mfa-verification';
|
|
@@ -141,6 +141,7 @@ const useAuthLayoutChecks = () => {
|
|
|
141
141
|
view.type !== 'wallet-claim-intro' &&
|
|
142
142
|
view.type !== 'passkey-recovery-add-email' &&
|
|
143
143
|
view.type !== 'global-wallet-confirm' &&
|
|
144
|
+
view.type !== 'global-wallet-malicious' &&
|
|
144
145
|
view.type !== 'global-wallet-info' &&
|
|
145
146
|
view.type !== 'mfa-choose-device' &&
|
|
146
147
|
view.type !== 'mfa-verification';
|
|
@@ -24,10 +24,17 @@ var user = require('../../../store/state/user/user.cjs');
|
|
|
24
24
|
require('../../../locale/locale.cjs');
|
|
25
25
|
var user$1 = require('../../../data/api/user/user.cjs');
|
|
26
26
|
var isCookieEnabled = require('../../functions/isCookieEnabled/isCookieEnabled.cjs');
|
|
27
|
+
var useDynamicEvents = require('../events/useDynamicEvents/useDynamicEvents.cjs');
|
|
27
28
|
|
|
28
29
|
const useResetCookieLocalStorage = ({ environmentId, projectSettings, setPrimaryWalletId, }) => {
|
|
29
30
|
const didRefreshUserRef = React.useRef(false);
|
|
30
31
|
const user$2 = user.getUser();
|
|
32
|
+
/**
|
|
33
|
+
* As an extra layer of safety, we must explicitly prevent the refresh from being called
|
|
34
|
+
* after a logout
|
|
35
|
+
*/
|
|
36
|
+
const hasLoggedOut = React.useRef(false);
|
|
37
|
+
useDynamicEvents.useInternalDynamicEvents('logout', () => (hasLoggedOut.current = true));
|
|
31
38
|
/**
|
|
32
39
|
* run this effect every time the user or project settings change
|
|
33
40
|
* but not when the process was already done.
|
|
@@ -48,7 +55,7 @@ const useResetCookieLocalStorage = ({ environmentId, projectSettings, setPrimary
|
|
|
48
55
|
* so attempt to set it here.
|
|
49
56
|
*/
|
|
50
57
|
const maybeInitUserRefresh = () => _tslib.__awaiter(void 0, void 0, void 0, function* () {
|
|
51
|
-
if (!user$2 && isCookieEnabled.isCookieEnabled()) {
|
|
58
|
+
if (!user$2 && isCookieEnabled.isCookieEnabled() && !hasLoggedOut.current) {
|
|
52
59
|
// Disable all next calls to this method
|
|
53
60
|
didRefreshUserRef.current = true;
|
|
54
61
|
try {
|
|
@@ -20,10 +20,17 @@ import { getUser } from '../../../store/state/user/user.js';
|
|
|
20
20
|
import '../../../locale/locale.js';
|
|
21
21
|
import { refreshUserJwt } from '../../../data/api/user/user.js';
|
|
22
22
|
import { isCookieEnabled } from '../../functions/isCookieEnabled/isCookieEnabled.js';
|
|
23
|
+
import { useInternalDynamicEvents } from '../events/useDynamicEvents/useDynamicEvents.js';
|
|
23
24
|
|
|
24
25
|
const useResetCookieLocalStorage = ({ environmentId, projectSettings, setPrimaryWalletId, }) => {
|
|
25
26
|
const didRefreshUserRef = useRef(false);
|
|
26
27
|
const user = getUser();
|
|
28
|
+
/**
|
|
29
|
+
* As an extra layer of safety, we must explicitly prevent the refresh from being called
|
|
30
|
+
* after a logout
|
|
31
|
+
*/
|
|
32
|
+
const hasLoggedOut = useRef(false);
|
|
33
|
+
useInternalDynamicEvents('logout', () => (hasLoggedOut.current = true));
|
|
27
34
|
/**
|
|
28
35
|
* run this effect every time the user or project settings change
|
|
29
36
|
* but not when the process was already done.
|
|
@@ -44,7 +51,7 @@ const useResetCookieLocalStorage = ({ environmentId, projectSettings, setPrimary
|
|
|
44
51
|
* so attempt to set it here.
|
|
45
52
|
*/
|
|
46
53
|
const maybeInitUserRefresh = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
47
|
-
if (!user && isCookieEnabled()) {
|
|
54
|
+
if (!user && isCookieEnabled() && !hasLoggedOut.current) {
|
|
48
55
|
// Disable all next calls to this method
|
|
49
56
|
didRefreshUserRef.current = true;
|
|
50
57
|
try {
|
|
@@ -131,11 +131,11 @@ const useSocialAuth = ({ sessionTimeout, onSettled, onError, onFarcasterUrl, })
|
|
|
131
131
|
const { generateSessionKey, shouldRegisterSessionKeysOnSignin } = useEmbeddedWalletSessionKeys.useEmbeddedWalletSessionKeys(environmentId);
|
|
132
132
|
const [isProcessing, setIsProcessing] = React.useState(false);
|
|
133
133
|
const [error, setError] = React.useState();
|
|
134
|
-
const clearError = () => {
|
|
134
|
+
const clearError = React.useCallback(() => {
|
|
135
135
|
setError(undefined);
|
|
136
136
|
setContextError(undefined);
|
|
137
|
-
};
|
|
138
|
-
const onFailed = (provider, reason, options) => {
|
|
137
|
+
}, [setContextError]);
|
|
138
|
+
const onFailed = React.useCallback((provider, reason, options) => {
|
|
139
139
|
setIsProcessing(false);
|
|
140
140
|
onError === null || onError === void 0 ? void 0 : onError();
|
|
141
141
|
onSettled === null || onSettled === void 0 ? void 0 : onSettled();
|
|
@@ -145,15 +145,15 @@ const useSocialAuth = ({ sessionTimeout, onSettled, onError, onFarcasterUrl, })
|
|
|
145
145
|
provider,
|
|
146
146
|
type: 'social',
|
|
147
147
|
}, reason);
|
|
148
|
-
};
|
|
149
|
-
const handleError = (provider, code, message, options) => {
|
|
148
|
+
}, [onError, onSettled]);
|
|
149
|
+
const handleError = React.useCallback((provider, code, message, options) => {
|
|
150
150
|
const error = { code, message };
|
|
151
151
|
logger.logger.error(message);
|
|
152
152
|
setError(error);
|
|
153
153
|
setErrorMessage(code);
|
|
154
154
|
onFailed(provider, { error }, options);
|
|
155
|
-
};
|
|
156
|
-
const checkValidProvider = (provider, authMode) => {
|
|
155
|
+
}, [onFailed, setErrorMessage]);
|
|
156
|
+
const checkValidProvider = React.useCallback((provider, authMode) => {
|
|
157
157
|
if (!provider) {
|
|
158
158
|
handleError(provider, types.SocialOAuthErrorCode.NO_PROVIDER, 'Provider is required', { raiseAuthFailure: authMode === 'signin' });
|
|
159
159
|
return false;
|
|
@@ -163,8 +163,8 @@ const useSocialAuth = ({ sessionTimeout, onSettled, onError, onFarcasterUrl, })
|
|
|
163
163
|
return false;
|
|
164
164
|
}
|
|
165
165
|
return true;
|
|
166
|
-
};
|
|
167
|
-
const linkAccount = (provider, apiCall) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
|
|
166
|
+
}, [handleError]);
|
|
167
|
+
const linkAccount = React.useCallback((provider, apiCall) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
|
|
168
168
|
try {
|
|
169
169
|
const response = yield apiCall();
|
|
170
170
|
if (!response) {
|
|
@@ -178,112 +178,16 @@ const useSocialAuth = ({ sessionTimeout, onSettled, onError, onFarcasterUrl, })
|
|
|
178
178
|
handleError(provider, types.SocialOAuthErrorCode.ACCOUNT_ALREADY_LINKED_TO_DIFFERENT_PROFILE, `Social account already linked to a different profile: ${provider}`, { raiseAuthFailure: false });
|
|
179
179
|
}
|
|
180
180
|
}
|
|
181
|
-
});
|
|
182
|
-
const signInAccount = (provider, apiCall) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
|
|
181
|
+
}), [handleError, onSettled]);
|
|
182
|
+
const signInAccount = React.useCallback((provider, apiCall) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
|
|
183
183
|
yield initAuth({
|
|
184
184
|
onError: () => handleError(provider, types.SocialOAuthErrorCode.SIGNIN_ERROR, `Failed to sign-in with social account: ${provider}`, { raiseAuthFailure: true }),
|
|
185
185
|
onSettled,
|
|
186
186
|
options: { provider },
|
|
187
187
|
verifyFunction: () => apiCall(),
|
|
188
188
|
});
|
|
189
|
-
});
|
|
190
|
-
const
|
|
191
|
-
var _b, _c;
|
|
192
|
-
clearError();
|
|
193
|
-
setIsProcessing(true);
|
|
194
|
-
if (!authMode) {
|
|
195
|
-
logger.logger.error('Auth mode is required. Please use either "link" or "signin"');
|
|
196
|
-
return;
|
|
197
|
-
}
|
|
198
|
-
if (!checkValidProvider(provider, authMode)) {
|
|
199
|
-
return;
|
|
200
|
-
}
|
|
201
|
-
// invalid connect request
|
|
202
|
-
if (validator && !validator(provider)) {
|
|
203
|
-
return;
|
|
204
|
-
}
|
|
205
|
-
dynamicEvents.dynamicEvents.emit('authInit', {
|
|
206
|
-
option: provider,
|
|
207
|
-
provider,
|
|
208
|
-
type: 'social',
|
|
209
|
-
});
|
|
210
|
-
if (provider === sdkApiCore.ProviderEnum.Farcaster) {
|
|
211
|
-
return connectWithFarcaster(authMode, {
|
|
212
|
-
captchaToken,
|
|
213
|
-
redirectUrl,
|
|
214
|
-
});
|
|
215
|
-
}
|
|
216
|
-
const state = randomString.randomString(32);
|
|
217
|
-
const verifier = randomString.randomString(43);
|
|
218
|
-
// Whether we will use PKCE (code verifier/challenge) for this provider
|
|
219
|
-
const usingPkce = providersRequiringPkce.includes(provider);
|
|
220
|
-
socialStorage.setSocialStorageFor(provider, {
|
|
221
|
-
captchaToken,
|
|
222
|
-
codeVerifier: usingPkce ? verifier : undefined,
|
|
223
|
-
state,
|
|
224
|
-
});
|
|
225
|
-
const loginUrlString = getOauthLoginUrl.getOauthLoginUrl((_b = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.providers) !== null && _b !== void 0 ? _b : [], provider);
|
|
226
|
-
if (!loginUrlString) {
|
|
227
|
-
handleError(provider, types.SocialOAuthErrorCode.NO_OAUTH_URL, `Failed to get login url to connect social account: ${provider}`, { raiseAuthFailure: authMode === 'signin' });
|
|
228
|
-
return;
|
|
229
|
-
}
|
|
230
|
-
const oauthLoginUrl = new URL(loginUrlString);
|
|
231
|
-
oauthLoginUrl.searchParams.set('state', state);
|
|
232
|
-
// only add pkce params for providers that support/require it
|
|
233
|
-
if (usingPkce) {
|
|
234
|
-
const digest = yield digestSHA256.digestSHA256(verifier);
|
|
235
|
-
oauthLoginUrl.searchParams.set('code_challenge', encodeBase64URL.encodeBase64URL(digest));
|
|
236
|
-
oauthLoginUrl.searchParams.set('code_challenge_method', 'S256');
|
|
237
|
-
}
|
|
238
|
-
const isMobile = utils.isMobile();
|
|
239
|
-
try {
|
|
240
|
-
const authCode = yield utils.Oauth2Service.getOauthCode({
|
|
241
|
-
apiProvider: getProviderByType.getProviderByType((_c = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.providers) !== null && _c !== void 0 ? _c : [], provider),
|
|
242
|
-
getOAuthResultFromApi: () => oauth.getOAuthResult(environmentId, provider, {
|
|
243
|
-
state,
|
|
244
|
-
}),
|
|
245
|
-
initWebAuth: ({ redirectUrl } = {}) => oauth.initAuth(environmentId, provider, {
|
|
246
|
-
redirectUrl: redirectUrl
|
|
247
|
-
? removeDynamicOauthParamsFromUrl(redirectUrl)
|
|
248
|
-
: undefined,
|
|
249
|
-
state,
|
|
250
|
-
}),
|
|
251
|
-
isMobile,
|
|
252
|
-
oauthLoginUrl,
|
|
253
|
-
onSettled,
|
|
254
|
-
provider,
|
|
255
|
-
redirectUrl: redirectUrl !== null && redirectUrl !== void 0 ? redirectUrl : defaultRedirectUrl,
|
|
256
|
-
sessionTimeout,
|
|
257
|
-
setIsProcessing,
|
|
258
|
-
state,
|
|
259
|
-
strategy,
|
|
260
|
-
});
|
|
261
|
-
yield completeConnection({
|
|
262
|
-
authCode,
|
|
263
|
-
authMode,
|
|
264
|
-
captchaToken,
|
|
265
|
-
provider,
|
|
266
|
-
state,
|
|
267
|
-
telegramAuthToken,
|
|
268
|
-
verifier,
|
|
269
|
-
});
|
|
270
|
-
}
|
|
271
|
-
catch (error) {
|
|
272
|
-
if (!utils.Oauth2Service.isGetOauthCodeError(error)) {
|
|
273
|
-
logger.logger.error('Social connection failed with unexpected error:', error);
|
|
274
|
-
onFailed(provider, { error }, { raiseAuthFailure: authMode === 'signin' });
|
|
275
|
-
return;
|
|
276
|
-
}
|
|
277
|
-
if (error === 'user-cancelled')
|
|
278
|
-
onFailed(provider, 'user-cancelled');
|
|
279
|
-
else {
|
|
280
|
-
handleError(provider, error.code, error.message, {
|
|
281
|
-
raiseAuthFailure: authMode === 'signin',
|
|
282
|
-
});
|
|
283
|
-
}
|
|
284
|
-
}
|
|
285
|
-
});
|
|
286
|
-
const completeConnection = (_d) => _tslib.__awaiter(void 0, [_d], void 0, function* ({ authMode, provider, state, authCode, captchaToken, verifier, telegramAuthToken, }) {
|
|
189
|
+
}), [handleError, initAuth, onSettled]);
|
|
190
|
+
const completeConnection = React.useCallback((_a) => _tslib.__awaiter(void 0, [_a], void 0, function* ({ authMode, provider, state, authCode, captchaToken, verifier, telegramAuthToken, }) {
|
|
287
191
|
try {
|
|
288
192
|
let sessionPublicKey = undefined;
|
|
289
193
|
if (shouldRegisterSessionKeysOnSignin()) {
|
|
@@ -339,8 +243,15 @@ const useSocialAuth = ({ sessionTimeout, onSettled, onError, onFarcasterUrl, })
|
|
|
339
243
|
logger.logger.error('Social connection failed with unexpected error:', error);
|
|
340
244
|
onFailed(provider, { error }, { raiseAuthFailure: authMode === 'signin' });
|
|
341
245
|
}
|
|
342
|
-
})
|
|
343
|
-
|
|
246
|
+
}), [
|
|
247
|
+
environmentId,
|
|
248
|
+
generateSessionKey,
|
|
249
|
+
linkAccount,
|
|
250
|
+
onFailed,
|
|
251
|
+
shouldRegisterSessionKeysOnSignin,
|
|
252
|
+
signInAccount,
|
|
253
|
+
]);
|
|
254
|
+
const connectWithFarcaster = React.useCallback((authMode_1, _b) => _tslib.__awaiter(void 0, [authMode_1, _b], void 0, function* (authMode, { captchaToken, redirectUrl }) {
|
|
344
255
|
const dynamicNonce = consumeNonce();
|
|
345
256
|
const domain = utils.PlatformService.getHost();
|
|
346
257
|
const data = yield farcaster.connect({
|
|
@@ -412,8 +323,124 @@ const useSocialAuth = ({ sessionTimeout, onSettled, onError, onFarcasterUrl, })
|
|
|
412
323
|
setShowAuthFlow(false, { clearErrors: false });
|
|
413
324
|
}
|
|
414
325
|
setIsProcessing(false);
|
|
415
|
-
})
|
|
416
|
-
|
|
326
|
+
}), [
|
|
327
|
+
consumeNonce,
|
|
328
|
+
defaultRedirectUrl,
|
|
329
|
+
environmentId,
|
|
330
|
+
generateSessionKey,
|
|
331
|
+
handleError,
|
|
332
|
+
linkAccount,
|
|
333
|
+
onFarcasterUrl,
|
|
334
|
+
setShowAuthFlow,
|
|
335
|
+
shouldRegisterSessionKeysOnSignin,
|
|
336
|
+
signInAccount,
|
|
337
|
+
]);
|
|
338
|
+
const connectSocialAccount = React.useCallback((_c) => _tslib.__awaiter(void 0, [_c], void 0, function* ({ authMode, provider, validator, captchaToken, redirectUrl, telegramAuthToken, }) {
|
|
339
|
+
var _d, _e;
|
|
340
|
+
clearError();
|
|
341
|
+
setIsProcessing(true);
|
|
342
|
+
if (!authMode) {
|
|
343
|
+
logger.logger.error('Auth mode is required. Please use either "link" or "signin"');
|
|
344
|
+
return;
|
|
345
|
+
}
|
|
346
|
+
if (!checkValidProvider(provider, authMode)) {
|
|
347
|
+
return;
|
|
348
|
+
}
|
|
349
|
+
// invalid connect request
|
|
350
|
+
if (validator && !validator(provider)) {
|
|
351
|
+
return;
|
|
352
|
+
}
|
|
353
|
+
dynamicEvents.dynamicEvents.emit('authInit', {
|
|
354
|
+
option: provider,
|
|
355
|
+
provider,
|
|
356
|
+
type: 'social',
|
|
357
|
+
});
|
|
358
|
+
if (provider === sdkApiCore.ProviderEnum.Farcaster) {
|
|
359
|
+
return connectWithFarcaster(authMode, {
|
|
360
|
+
captchaToken,
|
|
361
|
+
redirectUrl,
|
|
362
|
+
});
|
|
363
|
+
}
|
|
364
|
+
const state = randomString.randomString(32);
|
|
365
|
+
const verifier = randomString.randomString(43);
|
|
366
|
+
// Whether we will use PKCE (code verifier/challenge) for this provider
|
|
367
|
+
const usingPkce = providersRequiringPkce.includes(provider);
|
|
368
|
+
socialStorage.setSocialStorageFor(provider, {
|
|
369
|
+
captchaToken,
|
|
370
|
+
codeVerifier: usingPkce ? verifier : undefined,
|
|
371
|
+
state,
|
|
372
|
+
});
|
|
373
|
+
const loginUrlString = getOauthLoginUrl.getOauthLoginUrl((_d = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.providers) !== null && _d !== void 0 ? _d : [], provider);
|
|
374
|
+
if (!loginUrlString) {
|
|
375
|
+
handleError(provider, types.SocialOAuthErrorCode.NO_OAUTH_URL, `Failed to get login url to connect social account: ${provider}`, { raiseAuthFailure: authMode === 'signin' });
|
|
376
|
+
return;
|
|
377
|
+
}
|
|
378
|
+
const oauthLoginUrl = new URL(loginUrlString);
|
|
379
|
+
oauthLoginUrl.searchParams.set('state', state);
|
|
380
|
+
// only add pkce params for providers that support/require it
|
|
381
|
+
if (usingPkce) {
|
|
382
|
+
const digest = yield digestSHA256.digestSHA256(verifier);
|
|
383
|
+
oauthLoginUrl.searchParams.set('code_challenge', encodeBase64URL.encodeBase64URL(digest));
|
|
384
|
+
oauthLoginUrl.searchParams.set('code_challenge_method', 'S256');
|
|
385
|
+
}
|
|
386
|
+
const isMobile = utils.isMobile();
|
|
387
|
+
try {
|
|
388
|
+
const authCode = yield utils.Oauth2Service.getOauthCode({
|
|
389
|
+
apiProvider: getProviderByType.getProviderByType((_e = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.providers) !== null && _e !== void 0 ? _e : [], provider),
|
|
390
|
+
getOAuthResultFromApi: () => oauth.getOAuthResult(environmentId, provider, {
|
|
391
|
+
state,
|
|
392
|
+
}),
|
|
393
|
+
initWebAuth: ({ redirectUrl } = {}) => oauth.initAuth(environmentId, provider, {
|
|
394
|
+
redirectUrl: redirectUrl
|
|
395
|
+
? removeDynamicOauthParamsFromUrl(redirectUrl)
|
|
396
|
+
: undefined,
|
|
397
|
+
state,
|
|
398
|
+
}),
|
|
399
|
+
isMobile,
|
|
400
|
+
oauthLoginUrl,
|
|
401
|
+
onSettled,
|
|
402
|
+
provider,
|
|
403
|
+
redirectUrl: redirectUrl !== null && redirectUrl !== void 0 ? redirectUrl : defaultRedirectUrl,
|
|
404
|
+
sessionTimeout,
|
|
405
|
+
setIsProcessing,
|
|
406
|
+
state,
|
|
407
|
+
strategy,
|
|
408
|
+
});
|
|
409
|
+
yield completeConnection({
|
|
410
|
+
authCode,
|
|
411
|
+
authMode,
|
|
412
|
+
captchaToken,
|
|
413
|
+
provider,
|
|
414
|
+
state,
|
|
415
|
+
telegramAuthToken,
|
|
416
|
+
verifier,
|
|
417
|
+
});
|
|
418
|
+
}
|
|
419
|
+
catch (error) {
|
|
420
|
+
if (utils.Oauth2Service.isGetOauthCodeError(error)) {
|
|
421
|
+
handleError(provider, error.code, error.message, {
|
|
422
|
+
raiseAuthFailure: authMode === 'signin',
|
|
423
|
+
});
|
|
424
|
+
return;
|
|
425
|
+
}
|
|
426
|
+
logger.logger.error('Social connection failed with unexpected error:', error);
|
|
427
|
+
onFailed(provider, { error }, { raiseAuthFailure: authMode === 'signin' });
|
|
428
|
+
}
|
|
429
|
+
}), [
|
|
430
|
+
checkValidProvider,
|
|
431
|
+
clearError,
|
|
432
|
+
completeConnection,
|
|
433
|
+
connectWithFarcaster,
|
|
434
|
+
defaultRedirectUrl,
|
|
435
|
+
environmentId,
|
|
436
|
+
handleError,
|
|
437
|
+
onFailed,
|
|
438
|
+
onSettled,
|
|
439
|
+
projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.providers,
|
|
440
|
+
sessionTimeout,
|
|
441
|
+
strategy,
|
|
442
|
+
]);
|
|
443
|
+
return React.useMemo(() => ({
|
|
417
444
|
checkValidProvider,
|
|
418
445
|
completeConnection,
|
|
419
446
|
connectSocialAccount,
|
|
@@ -422,7 +449,14 @@ const useSocialAuth = ({ sessionTimeout, onSettled, onError, onFarcasterUrl, })
|
|
|
422
449
|
isProcessing,
|
|
423
450
|
setError,
|
|
424
451
|
setIsProcessing,
|
|
425
|
-
}
|
|
452
|
+
}), [
|
|
453
|
+
checkValidProvider,
|
|
454
|
+
completeConnection,
|
|
455
|
+
connectSocialAccount,
|
|
456
|
+
error,
|
|
457
|
+
handleError,
|
|
458
|
+
isProcessing,
|
|
459
|
+
]);
|
|
426
460
|
};
|
|
427
461
|
const removeDynamicOauthParamsFromUrl = (url) => {
|
|
428
462
|
const urlObject = new URL(url);
|