@dynamic-labs/sdk-react-core 4.0.0-alpha.2 → 4.0.0-alpha.4
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 +21 -0
- package/package.cjs +2 -2
- package/package.js +2 -2
- package/package.json +12 -12
- package/src/lib/components/QRCode/QRCode.cjs +2 -2
- package/src/lib/components/QRCode/QRCode.js +2 -2
- package/src/lib/components/SendBalanceForm/SendBalanceForm.cjs +5 -1
- package/src/lib/components/SendBalanceForm/SendBalanceForm.js +5 -1
- package/src/lib/components/TransactionConfirmationPageLayout/utils.cjs +5 -6
- package/src/lib/components/TransactionConfirmationPageLayout/utils.js +5 -6
- package/src/lib/context/DynamicContext/DynamicContext.cjs +14 -16
- package/src/lib/context/DynamicContext/DynamicContext.js +14 -16
- package/src/lib/data/api/oauth/oauth.cjs +14 -0
- package/src/lib/data/api/oauth/oauth.d.ts +1 -0
- package/src/lib/data/api/oauth/oauth.js +14 -1
- package/src/lib/store/internalImplementation/utils/clearExpiredData/clearExpiredData.cjs +1 -6
- package/src/lib/store/internalImplementation/utils/clearExpiredData/clearExpiredData.js +1 -6
- package/src/lib/store/stateConfig.cjs +0 -5
- package/src/lib/store/stateConfig.js +0 -5
- package/src/lib/store/types.d.ts +1 -6
- package/src/lib/styles/index.shadow.cjs +1 -1
- package/src/lib/styles/index.shadow.js +1 -1
- package/src/lib/utils/hooks/useNetworkConfigurationsFromProjectSettings/index.d.ts +1 -0
- package/src/lib/utils/hooks/useNetworkConfigurationsFromProjectSettings/useNetworkConfigurationsFromProjectSettings.cjs +63 -0
- package/src/lib/utils/hooks/useNetworkConfigurationsFromProjectSettings/useNetworkConfigurationsFromProjectSettings.d.ts +9 -0
- package/src/lib/utils/hooks/useNetworkConfigurationsFromProjectSettings/useNetworkConfigurationsFromProjectSettings.js +59 -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/utils/hooks/useTelegramLogin/useTelegramLogin.cjs +20 -7
- package/src/lib/utils/hooks/useTelegramLogin/useTelegramLogin.d.ts +1 -0
- package/src/lib/utils/hooks/useTelegramLogin/useTelegramLogin.js +20 -7
- package/src/lib/views/MfaChooseDeviceView/MfaChooseDeviceView.cjs +1 -1
- package/src/lib/views/MfaChooseDeviceView/MfaChooseDeviceView.js +1 -1
- package/src/lib/views/WalletList/data.cjs +6 -1
- package/src/lib/views/WalletList/data.js +6 -1
- package/src/lib/store/state/networkConfigurations/index.d.ts +0 -1
- package/src/lib/store/state/networkConfigurations/networkConfigurations.cjs +0 -169
- package/src/lib/store/state/networkConfigurations/networkConfigurations.d.ts +0 -10
- package/src/lib/store/state/networkConfigurations/networkConfigurations.js +0 -161
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
'use client'
|
|
2
2
|
import { __awaiter } from '../../../../../_virtual/_tslib.js';
|
|
3
|
-
import { useMemo, useState } from 'react';
|
|
3
|
+
import { useMemo, useState, useCallback } from 'react';
|
|
4
4
|
import { ProviderEnum } from '@dynamic-labs/sdk-api-core';
|
|
5
5
|
import { SocialOAuthErrorCode } from '@dynamic-labs/types';
|
|
6
|
-
import {
|
|
6
|
+
import { SocialAccountAlreadyExistsError, PlatformService, isMobile, Oauth2Service } from '@dynamic-labs/utils';
|
|
7
7
|
import '../../../context/DynamicContext/DynamicContext.js';
|
|
8
8
|
import { logger } from '../../../shared/logger.js';
|
|
9
9
|
import '@dynamic-labs/iconic';
|
|
@@ -28,7 +28,7 @@ import { getProviderByType } from '../../functions/getProviderByType/getProvider
|
|
|
28
28
|
import { randomString } from '../../functions/randomString/randomString.js';
|
|
29
29
|
import '../../../config/ApiEndpoint.js';
|
|
30
30
|
import '../../../store/state/user/user.js';
|
|
31
|
-
import {
|
|
31
|
+
import { telegramSignIn, signInOAuth, telegramVerify, verifyOAuth, getOAuthResult, initAuth, farcasterSignIn, farcasterVerify } from '../../../data/api/oauth/oauth.js';
|
|
32
32
|
import '../../../locale/locale.js';
|
|
33
33
|
import '../../../store/state/projectSettings/projectSettings.js';
|
|
34
34
|
import '../../../context/AccessDeniedContext/AccessDeniedContext.js';
|
|
@@ -130,11 +130,11 @@ const useSocialAuth = ({ sessionTimeout, onSettled, onError, onFarcasterUrl, })
|
|
|
130
130
|
});
|
|
131
131
|
const [isProcessing, setIsProcessing] = useState(false);
|
|
132
132
|
const [error, setError] = useState();
|
|
133
|
-
const clearError = () => {
|
|
133
|
+
const clearError = useCallback(() => {
|
|
134
134
|
setError(undefined);
|
|
135
135
|
setContextError(undefined);
|
|
136
|
-
};
|
|
137
|
-
const onFailed = (provider, reason, options) => {
|
|
136
|
+
}, [setContextError]);
|
|
137
|
+
const onFailed = useCallback((provider, reason, options) => {
|
|
138
138
|
setIsProcessing(false);
|
|
139
139
|
onError === null || onError === void 0 ? void 0 : onError();
|
|
140
140
|
onSettled === null || onSettled === void 0 ? void 0 : onSettled();
|
|
@@ -144,15 +144,15 @@ const useSocialAuth = ({ sessionTimeout, onSettled, onError, onFarcasterUrl, })
|
|
|
144
144
|
provider,
|
|
145
145
|
type: 'social',
|
|
146
146
|
}, reason);
|
|
147
|
-
};
|
|
148
|
-
const handleError = (provider, code, message, options) => {
|
|
147
|
+
}, [onError, onSettled]);
|
|
148
|
+
const handleError = useCallback((provider, code, message, options) => {
|
|
149
149
|
const error = { code, message };
|
|
150
150
|
logger.error(message);
|
|
151
151
|
setError(error);
|
|
152
152
|
setErrorMessage(code);
|
|
153
153
|
onFailed(provider, { error }, options);
|
|
154
|
-
};
|
|
155
|
-
const checkValidProvider = (provider, authMode) => {
|
|
154
|
+
}, [onFailed, setErrorMessage]);
|
|
155
|
+
const checkValidProvider = useCallback((provider, authMode) => {
|
|
156
156
|
if (!provider) {
|
|
157
157
|
handleError(provider, SocialOAuthErrorCode.NO_PROVIDER, 'Provider is required', { raiseAuthFailure: authMode === 'signin' });
|
|
158
158
|
return false;
|
|
@@ -162,8 +162,8 @@ const useSocialAuth = ({ sessionTimeout, onSettled, onError, onFarcasterUrl, })
|
|
|
162
162
|
return false;
|
|
163
163
|
}
|
|
164
164
|
return true;
|
|
165
|
-
};
|
|
166
|
-
const linkAccount = (provider, apiCall) => __awaiter(void 0, void 0, void 0, function* () {
|
|
165
|
+
}, [handleError]);
|
|
166
|
+
const linkAccount = useCallback((provider, apiCall) => __awaiter(void 0, void 0, void 0, function* () {
|
|
167
167
|
try {
|
|
168
168
|
const response = yield apiCall();
|
|
169
169
|
if (!response) {
|
|
@@ -177,112 +177,16 @@ const useSocialAuth = ({ sessionTimeout, onSettled, onError, onFarcasterUrl, })
|
|
|
177
177
|
handleError(provider, SocialOAuthErrorCode.ACCOUNT_ALREADY_LINKED_TO_DIFFERENT_PROFILE, `Social account already linked to a different profile: ${provider}`, { raiseAuthFailure: false });
|
|
178
178
|
}
|
|
179
179
|
}
|
|
180
|
-
});
|
|
181
|
-
const signInAccount = (provider, apiCall) => __awaiter(void 0, void 0, void 0, function* () {
|
|
180
|
+
}), [handleError, onSettled]);
|
|
181
|
+
const signInAccount = useCallback((provider, apiCall) => __awaiter(void 0, void 0, void 0, function* () {
|
|
182
182
|
yield initAuth$1({
|
|
183
183
|
onError: () => handleError(provider, SocialOAuthErrorCode.SIGNIN_ERROR, `Failed to sign-in with social account: ${provider}`, { raiseAuthFailure: true }),
|
|
184
184
|
onSettled,
|
|
185
185
|
options: { provider },
|
|
186
186
|
verifyFunction: () => apiCall(),
|
|
187
187
|
});
|
|
188
|
-
});
|
|
189
|
-
const
|
|
190
|
-
var _b, _c;
|
|
191
|
-
clearError();
|
|
192
|
-
setIsProcessing(true);
|
|
193
|
-
if (!authMode) {
|
|
194
|
-
logger.error('Auth mode is required. Please use either "link" or "signin"');
|
|
195
|
-
return;
|
|
196
|
-
}
|
|
197
|
-
if (!checkValidProvider(provider, authMode)) {
|
|
198
|
-
return;
|
|
199
|
-
}
|
|
200
|
-
// invalid connect request
|
|
201
|
-
if (validator && !validator(provider)) {
|
|
202
|
-
return;
|
|
203
|
-
}
|
|
204
|
-
dynamicEvents.emit('authInit', {
|
|
205
|
-
option: provider,
|
|
206
|
-
provider,
|
|
207
|
-
type: 'social',
|
|
208
|
-
});
|
|
209
|
-
if (provider === ProviderEnum.Farcaster) {
|
|
210
|
-
return connectWithFarcaster(authMode, {
|
|
211
|
-
captchaToken,
|
|
212
|
-
redirectUrl,
|
|
213
|
-
});
|
|
214
|
-
}
|
|
215
|
-
const state = randomString(32);
|
|
216
|
-
const verifier = randomString(43);
|
|
217
|
-
// Whether we will use PKCE (code verifier/challenge) for this provider
|
|
218
|
-
const usingPkce = providersRequiringPkce.includes(provider);
|
|
219
|
-
setSocialStorageFor(provider, {
|
|
220
|
-
captchaToken,
|
|
221
|
-
codeVerifier: usingPkce ? verifier : undefined,
|
|
222
|
-
state,
|
|
223
|
-
});
|
|
224
|
-
const loginUrlString = getOauthLoginUrl((_b = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.providers) !== null && _b !== void 0 ? _b : [], provider);
|
|
225
|
-
if (!loginUrlString) {
|
|
226
|
-
handleError(provider, SocialOAuthErrorCode.NO_OAUTH_URL, `Failed to get login url to connect social account: ${provider}`, { raiseAuthFailure: authMode === 'signin' });
|
|
227
|
-
return;
|
|
228
|
-
}
|
|
229
|
-
const oauthLoginUrl = new URL(loginUrlString);
|
|
230
|
-
oauthLoginUrl.searchParams.set('state', state);
|
|
231
|
-
// only add pkce params for providers that support/require it
|
|
232
|
-
if (usingPkce) {
|
|
233
|
-
const digest = yield digestSHA256(verifier);
|
|
234
|
-
oauthLoginUrl.searchParams.set('code_challenge', encodeBase64URL(digest));
|
|
235
|
-
oauthLoginUrl.searchParams.set('code_challenge_method', 'S256');
|
|
236
|
-
}
|
|
237
|
-
const isMobile$1 = isMobile();
|
|
238
|
-
try {
|
|
239
|
-
const authCode = yield Oauth2Service.getOauthCode({
|
|
240
|
-
apiProvider: getProviderByType((_c = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.providers) !== null && _c !== void 0 ? _c : [], provider),
|
|
241
|
-
getOAuthResultFromApi: () => getOAuthResult(environmentId, provider, {
|
|
242
|
-
state,
|
|
243
|
-
}),
|
|
244
|
-
initWebAuth: ({ redirectUrl } = {}) => initAuth(environmentId, provider, {
|
|
245
|
-
redirectUrl: redirectUrl
|
|
246
|
-
? removeDynamicOauthParamsFromUrl(redirectUrl)
|
|
247
|
-
: undefined,
|
|
248
|
-
state,
|
|
249
|
-
}),
|
|
250
|
-
isMobile: isMobile$1,
|
|
251
|
-
oauthLoginUrl,
|
|
252
|
-
onSettled,
|
|
253
|
-
provider,
|
|
254
|
-
redirectUrl: redirectUrl !== null && redirectUrl !== void 0 ? redirectUrl : defaultRedirectUrl,
|
|
255
|
-
sessionTimeout,
|
|
256
|
-
setIsProcessing,
|
|
257
|
-
state,
|
|
258
|
-
strategy,
|
|
259
|
-
});
|
|
260
|
-
yield completeConnection({
|
|
261
|
-
authCode,
|
|
262
|
-
authMode,
|
|
263
|
-
captchaToken,
|
|
264
|
-
provider,
|
|
265
|
-
state,
|
|
266
|
-
telegramAuthToken,
|
|
267
|
-
verifier,
|
|
268
|
-
});
|
|
269
|
-
}
|
|
270
|
-
catch (error) {
|
|
271
|
-
if (!Oauth2Service.isGetOauthCodeError(error)) {
|
|
272
|
-
logger.error('Social connection failed with unexpected error:', error);
|
|
273
|
-
onFailed(provider, { error }, { raiseAuthFailure: authMode === 'signin' });
|
|
274
|
-
return;
|
|
275
|
-
}
|
|
276
|
-
if (error === 'user-cancelled')
|
|
277
|
-
onFailed(provider, 'user-cancelled');
|
|
278
|
-
else {
|
|
279
|
-
handleError(provider, error.code, error.message, {
|
|
280
|
-
raiseAuthFailure: authMode === 'signin',
|
|
281
|
-
});
|
|
282
|
-
}
|
|
283
|
-
}
|
|
284
|
-
});
|
|
285
|
-
const completeConnection = (_d) => __awaiter(void 0, [_d], void 0, function* ({ authMode, provider, state, authCode, captchaToken, verifier, telegramAuthToken, forceCreateUser = false, }) {
|
|
188
|
+
}), [handleError, initAuth$1, onSettled]);
|
|
189
|
+
const completeConnection = useCallback((_a) => __awaiter(void 0, [_a], void 0, function* ({ authMode, provider, state, authCode, captchaToken, verifier, telegramAuthToken, forceCreateUser = false, }) {
|
|
286
190
|
try {
|
|
287
191
|
let sessionPublicKey = undefined;
|
|
288
192
|
if (shouldRegisterSessionKeysOnSignin()) {
|
|
@@ -339,8 +243,15 @@ const useSocialAuth = ({ sessionTimeout, onSettled, onError, onFarcasterUrl, })
|
|
|
339
243
|
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 = useCallback((authMode_1, _b) => __awaiter(void 0, [authMode_1, _b], void 0, function* (authMode, { captchaToken, redirectUrl }) {
|
|
344
255
|
const dynamicNonce = consumeNonce();
|
|
345
256
|
const domain = PlatformService.getHost();
|
|
346
257
|
const data = yield 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 = useCallback((_c) => __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.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.emit('authInit', {
|
|
354
|
+
option: provider,
|
|
355
|
+
provider,
|
|
356
|
+
type: 'social',
|
|
357
|
+
});
|
|
358
|
+
if (provider === ProviderEnum.Farcaster) {
|
|
359
|
+
return connectWithFarcaster(authMode, {
|
|
360
|
+
captchaToken,
|
|
361
|
+
redirectUrl,
|
|
362
|
+
});
|
|
363
|
+
}
|
|
364
|
+
const state = randomString(32);
|
|
365
|
+
const verifier = randomString(43);
|
|
366
|
+
// Whether we will use PKCE (code verifier/challenge) for this provider
|
|
367
|
+
const usingPkce = providersRequiringPkce.includes(provider);
|
|
368
|
+
setSocialStorageFor(provider, {
|
|
369
|
+
captchaToken,
|
|
370
|
+
codeVerifier: usingPkce ? verifier : undefined,
|
|
371
|
+
state,
|
|
372
|
+
});
|
|
373
|
+
const loginUrlString = getOauthLoginUrl((_d = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.providers) !== null && _d !== void 0 ? _d : [], provider);
|
|
374
|
+
if (!loginUrlString) {
|
|
375
|
+
handleError(provider, 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(verifier);
|
|
383
|
+
oauthLoginUrl.searchParams.set('code_challenge', encodeBase64URL(digest));
|
|
384
|
+
oauthLoginUrl.searchParams.set('code_challenge_method', 'S256');
|
|
385
|
+
}
|
|
386
|
+
const isMobile$1 = isMobile();
|
|
387
|
+
try {
|
|
388
|
+
const authCode = yield Oauth2Service.getOauthCode({
|
|
389
|
+
apiProvider: getProviderByType((_e = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.providers) !== null && _e !== void 0 ? _e : [], provider),
|
|
390
|
+
getOAuthResultFromApi: () => getOAuthResult(environmentId, provider, {
|
|
391
|
+
state,
|
|
392
|
+
}),
|
|
393
|
+
initWebAuth: ({ redirectUrl } = {}) => initAuth(environmentId, provider, {
|
|
394
|
+
redirectUrl: redirectUrl
|
|
395
|
+
? removeDynamicOauthParamsFromUrl(redirectUrl)
|
|
396
|
+
: undefined,
|
|
397
|
+
state,
|
|
398
|
+
}),
|
|
399
|
+
isMobile: isMobile$1,
|
|
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 (Oauth2Service.isGetOauthCodeError(error)) {
|
|
421
|
+
handleError(provider, error.code, error.message, {
|
|
422
|
+
raiseAuthFailure: authMode === 'signin',
|
|
423
|
+
});
|
|
424
|
+
return;
|
|
425
|
+
}
|
|
426
|
+
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 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);
|
|
@@ -22,6 +22,7 @@ require('../../../shared/consts/index.cjs');
|
|
|
22
22
|
var isProviderEnabled = require('../../functions/isProviderEnabled/isProviderEnabled.cjs');
|
|
23
23
|
require('../../../config/ApiEndpoint.cjs');
|
|
24
24
|
require('../../../store/state/user/user.cjs');
|
|
25
|
+
var oauth = require('../../../data/api/oauth/oauth.cjs');
|
|
25
26
|
require('../../../locale/locale.cjs');
|
|
26
27
|
require('../../../store/state/projectSettings/projectSettings.cjs');
|
|
27
28
|
require('../../../context/DynamicContext/DynamicContext.cjs');
|
|
@@ -94,23 +95,34 @@ require('../../../store/state/tokenBalances.cjs');
|
|
|
94
95
|
var useInternalDynamicContext = require('../../../context/DynamicContext/useDynamicContext/useInternalDynamicContext.cjs');
|
|
95
96
|
|
|
96
97
|
const useTelegramLogin = () => {
|
|
97
|
-
const { sdkHasLoaded, user, projectSettings } = useInternalDynamicContext.useInternalDynamicContext();
|
|
98
|
+
const { sdkHasLoaded, user, projectSettings, environmentId } = useInternalDynamicContext.useInternalDynamicContext();
|
|
98
99
|
const providers = (projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.providers) || [];
|
|
99
100
|
const { completeConnection } = useSocialAuth.useSocialAuth({
|
|
100
101
|
sessionTimeout: 20000,
|
|
101
102
|
});
|
|
102
|
-
const
|
|
103
|
+
const getTelegramAuthToken = () => {
|
|
103
104
|
// in non-browser environments like Node.js
|
|
104
105
|
// or during server-side rendering (e.g., with frameworks like Next.js).
|
|
105
106
|
if (typeof window === 'undefined') {
|
|
106
107
|
return;
|
|
107
108
|
}
|
|
108
109
|
const search = new URLSearchParams(window.location.search);
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
110
|
+
return search.get('telegramAuthToken') || undefined;
|
|
111
|
+
};
|
|
112
|
+
const canProceedWithTelegram = (telegramAuthToken) => isProviderEnabled.isProviderEnabled(providers, sdkApiCore.ProviderEnum.Telegram) &&
|
|
113
|
+
sdkHasLoaded &&
|
|
114
|
+
!user &&
|
|
115
|
+
telegramAuthToken;
|
|
116
|
+
const isAuthWithTelegram = () => _tslib.__awaiter(void 0, void 0, void 0, function* () {
|
|
117
|
+
const telegramAuthToken = getTelegramAuthToken();
|
|
118
|
+
if (!canProceedWithTelegram(telegramAuthToken)) {
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
return oauth.isUserLinkedWithTelegram(environmentId, { telegramAuthToken });
|
|
122
|
+
});
|
|
123
|
+
const telegramSignIn = (...args_1) => _tslib.__awaiter(void 0, [...args_1], void 0, function* ({ forceCreateUser = false, } = {}) {
|
|
124
|
+
const telegramAuthToken = getTelegramAuthToken();
|
|
125
|
+
if (!canProceedWithTelegram(telegramAuthToken)) {
|
|
114
126
|
return;
|
|
115
127
|
}
|
|
116
128
|
yield completeConnection({
|
|
@@ -122,6 +134,7 @@ const useTelegramLogin = () => {
|
|
|
122
134
|
});
|
|
123
135
|
});
|
|
124
136
|
return {
|
|
137
|
+
isAuthWithTelegram,
|
|
125
138
|
telegramSignIn,
|
|
126
139
|
};
|
|
127
140
|
};
|
|
@@ -18,6 +18,7 @@ import '../../../shared/consts/index.js';
|
|
|
18
18
|
import { isProviderEnabled } from '../../functions/isProviderEnabled/isProviderEnabled.js';
|
|
19
19
|
import '../../../config/ApiEndpoint.js';
|
|
20
20
|
import '../../../store/state/user/user.js';
|
|
21
|
+
import { isUserLinkedWithTelegram } from '../../../data/api/oauth/oauth.js';
|
|
21
22
|
import '../../../locale/locale.js';
|
|
22
23
|
import '../../../store/state/projectSettings/projectSettings.js';
|
|
23
24
|
import '../../../context/DynamicContext/DynamicContext.js';
|
|
@@ -90,23 +91,34 @@ import '../../../store/state/tokenBalances.js';
|
|
|
90
91
|
import { useInternalDynamicContext } from '../../../context/DynamicContext/useDynamicContext/useInternalDynamicContext.js';
|
|
91
92
|
|
|
92
93
|
const useTelegramLogin = () => {
|
|
93
|
-
const { sdkHasLoaded, user, projectSettings } = useInternalDynamicContext();
|
|
94
|
+
const { sdkHasLoaded, user, projectSettings, environmentId } = useInternalDynamicContext();
|
|
94
95
|
const providers = (projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.providers) || [];
|
|
95
96
|
const { completeConnection } = useSocialAuth({
|
|
96
97
|
sessionTimeout: 20000,
|
|
97
98
|
});
|
|
98
|
-
const
|
|
99
|
+
const getTelegramAuthToken = () => {
|
|
99
100
|
// in non-browser environments like Node.js
|
|
100
101
|
// or during server-side rendering (e.g., with frameworks like Next.js).
|
|
101
102
|
if (typeof window === 'undefined') {
|
|
102
103
|
return;
|
|
103
104
|
}
|
|
104
105
|
const search = new URLSearchParams(window.location.search);
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
106
|
+
return search.get('telegramAuthToken') || undefined;
|
|
107
|
+
};
|
|
108
|
+
const canProceedWithTelegram = (telegramAuthToken) => isProviderEnabled(providers, ProviderEnum.Telegram) &&
|
|
109
|
+
sdkHasLoaded &&
|
|
110
|
+
!user &&
|
|
111
|
+
telegramAuthToken;
|
|
112
|
+
const isAuthWithTelegram = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
113
|
+
const telegramAuthToken = getTelegramAuthToken();
|
|
114
|
+
if (!canProceedWithTelegram(telegramAuthToken)) {
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
return isUserLinkedWithTelegram(environmentId, { telegramAuthToken });
|
|
118
|
+
});
|
|
119
|
+
const telegramSignIn = (...args_1) => __awaiter(void 0, [...args_1], void 0, function* ({ forceCreateUser = false, } = {}) {
|
|
120
|
+
const telegramAuthToken = getTelegramAuthToken();
|
|
121
|
+
if (!canProceedWithTelegram(telegramAuthToken)) {
|
|
110
122
|
return;
|
|
111
123
|
}
|
|
112
124
|
yield completeConnection({
|
|
@@ -118,6 +130,7 @@ const useTelegramLogin = () => {
|
|
|
118
130
|
});
|
|
119
131
|
});
|
|
120
132
|
return {
|
|
133
|
+
isAuthWithTelegram,
|
|
121
134
|
telegramSignIn,
|
|
122
135
|
};
|
|
123
136
|
};
|
|
@@ -126,7 +126,7 @@ const MfaChooseDeviceView = ({ isInitialSetup = true, }) => {
|
|
|
126
126
|
? t('dyn_mfa.choose_device_view.title')
|
|
127
127
|
: t('dyn_mfa.choose_device_view.choose_another_method') }) }) }), jsxRuntime.jsxs("div", { className: 'mfa-choose-device-view__body', "data-testid": 'mfa-choose-device-view', children: [jsxRuntime.jsx(secureAccount.ReactComponent, {}), jsxRuntime.jsx(Typography.Typography, { className: 'mfa-choose-device-view__copy', variant: 'body_normal', weight: 'regular', color: 'secondary', children: isInitialSetup
|
|
128
128
|
? t('dyn_mfa.choose_device_view.select_options')
|
|
129
|
-
: t('dyn_mfa.choose_device_view.choose_another_method_description') }), mfaOptions.map((option) => (jsxRuntime.jsxs(Button.Button, { buttonClassName: 'mfa-choose-device-view__button', expanded: true, onClick: () => handleClick(option), children: [jsxRuntime.jsxs("div", { className: 'mfa-choose-device-view__button__header', children: [jsxRuntime.jsx(Typography.Typography, { copykey: option.labelKey, children: t(option.labelKey) }), jsxRuntime.jsx(chevronLeft.ReactComponent, { className: 'mfa-choose-device-view__icon--rotate' })] }), jsxRuntime.jsx(Typography.Typography, { className: 'mfa-choose-device-view__button__description', color: 'secondary', copykey: option.descriptionKey, children: t(option.descriptionKey) })] }, option.type))), jsxRuntime.jsx(TextButton.TextButton, { className: 'mfa-choose-device-view__logout', onClick: handleLogOut, copykey: 'dyn_mfa.choose_device_view.logout', children: t('dyn_mfa.choose_device_view.logout') })] })] }));
|
|
129
|
+
: t('dyn_mfa.choose_device_view.choose_another_method_description') }), mfaOptions.map((option) => (jsxRuntime.jsxs(Button.Button, { buttonClassName: 'mfa-choose-device-view__button', expanded: true, onClick: () => handleClick(option), children: [jsxRuntime.jsxs("div", { className: 'mfa-choose-device-view__button__header', children: [jsxRuntime.jsx(Typography.Typography, { copykey: option.labelKey, color: 'primary', children: t(option.labelKey) }), jsxRuntime.jsx(chevronLeft.ReactComponent, { className: 'mfa-choose-device-view__icon--rotate' })] }), jsxRuntime.jsx(Typography.Typography, { className: 'mfa-choose-device-view__button__description', color: 'secondary', copykey: option.descriptionKey, children: t(option.descriptionKey) })] }, option.type))), jsxRuntime.jsx(TextButton.TextButton, { className: 'mfa-choose-device-view__logout', onClick: handleLogOut, copykey: 'dyn_mfa.choose_device_view.logout', children: t('dyn_mfa.choose_device_view.logout') })] })] }));
|
|
130
130
|
};
|
|
131
131
|
|
|
132
132
|
exports.MfaChooseDeviceView = MfaChooseDeviceView;
|
|
@@ -122,7 +122,7 @@ const MfaChooseDeviceView = ({ isInitialSetup = true, }) => {
|
|
|
122
122
|
? t('dyn_mfa.choose_device_view.title')
|
|
123
123
|
: t('dyn_mfa.choose_device_view.choose_another_method') }) }) }), jsxs("div", { className: 'mfa-choose-device-view__body', "data-testid": 'mfa-choose-device-view', children: [jsx(SvgSecureAccount, {}), jsx(Typography, { className: 'mfa-choose-device-view__copy', variant: 'body_normal', weight: 'regular', color: 'secondary', children: isInitialSetup
|
|
124
124
|
? t('dyn_mfa.choose_device_view.select_options')
|
|
125
|
-
: t('dyn_mfa.choose_device_view.choose_another_method_description') }), mfaOptions.map((option) => (jsxs(Button, { buttonClassName: 'mfa-choose-device-view__button', expanded: true, onClick: () => handleClick(option), children: [jsxs("div", { className: 'mfa-choose-device-view__button__header', children: [jsx(Typography, { copykey: option.labelKey, children: t(option.labelKey) }), jsx(SvgChevronLeft, { className: 'mfa-choose-device-view__icon--rotate' })] }), jsx(Typography, { className: 'mfa-choose-device-view__button__description', color: 'secondary', copykey: option.descriptionKey, children: t(option.descriptionKey) })] }, option.type))), jsx(TextButton, { className: 'mfa-choose-device-view__logout', onClick: handleLogOut, copykey: 'dyn_mfa.choose_device_view.logout', children: t('dyn_mfa.choose_device_view.logout') })] })] }));
|
|
125
|
+
: t('dyn_mfa.choose_device_view.choose_another_method_description') }), mfaOptions.map((option) => (jsxs(Button, { buttonClassName: 'mfa-choose-device-view__button', expanded: true, onClick: () => handleClick(option), children: [jsxs("div", { className: 'mfa-choose-device-view__button__header', children: [jsx(Typography, { copykey: option.labelKey, color: 'primary', children: t(option.labelKey) }), jsx(SvgChevronLeft, { className: 'mfa-choose-device-view__icon--rotate' })] }), jsx(Typography, { className: 'mfa-choose-device-view__button__description', color: 'secondary', copykey: option.descriptionKey, children: t(option.descriptionKey) })] }, option.type))), jsx(TextButton, { className: 'mfa-choose-device-view__logout', onClick: handleLogOut, copykey: 'dyn_mfa.choose_device_view.logout', children: t('dyn_mfa.choose_device_view.logout') })] })] }));
|
|
126
126
|
};
|
|
127
127
|
|
|
128
128
|
export { MfaChooseDeviceView };
|
|
@@ -37,7 +37,12 @@ const getWallets = (props) => {
|
|
|
37
37
|
getSupportedWalletOpts: Object.assign(Object.assign({}, props.getSupportedWalletOpts), { chainRpcProviders: rpcProviders.ChainRpcProviders, walletConnectProjectId: (_a = props.getSupportedWalletOpts.settings.sdk.walletConnect) === null || _a === void 0 ? void 0 : _a.projectId }),
|
|
38
38
|
}).map((wallet) => {
|
|
39
39
|
var _a;
|
|
40
|
-
(_a = props.walletConnectorExtensions) === null || _a === void 0 ? void 0 : _a.forEach((extension) =>
|
|
40
|
+
(_a = props.walletConnectorExtensions) === null || _a === void 0 ? void 0 : _a.forEach((extension) => {
|
|
41
|
+
var _a;
|
|
42
|
+
return wallet.extend(extension, {
|
|
43
|
+
walletConnectDappProjectId: (_a = props.getSupportedWalletOpts.settings.sdk.walletConnect) === null || _a === void 0 ? void 0 : _a.walletProjectId,
|
|
44
|
+
});
|
|
45
|
+
});
|
|
41
46
|
return createWallet.createWallet(props.getSupportedWalletOpts.walletBook, wallet);
|
|
42
47
|
});
|
|
43
48
|
};
|
|
@@ -33,7 +33,12 @@ const getWallets = (props) => {
|
|
|
33
33
|
getSupportedWalletOpts: Object.assign(Object.assign({}, props.getSupportedWalletOpts), { chainRpcProviders: ChainRpcProviders, walletConnectProjectId: (_a = props.getSupportedWalletOpts.settings.sdk.walletConnect) === null || _a === void 0 ? void 0 : _a.projectId }),
|
|
34
34
|
}).map((wallet) => {
|
|
35
35
|
var _a;
|
|
36
|
-
(_a = props.walletConnectorExtensions) === null || _a === void 0 ? void 0 : _a.forEach((extension) =>
|
|
36
|
+
(_a = props.walletConnectorExtensions) === null || _a === void 0 ? void 0 : _a.forEach((extension) => {
|
|
37
|
+
var _a;
|
|
38
|
+
return wallet.extend(extension, {
|
|
39
|
+
walletConnectDappProjectId: (_a = props.getSupportedWalletOpts.settings.sdk.walletConnect) === null || _a === void 0 ? void 0 : _a.walletProjectId,
|
|
40
|
+
});
|
|
41
|
+
});
|
|
37
42
|
return createWallet(props.getSupportedWalletOpts.walletBook, wallet);
|
|
38
43
|
});
|
|
39
44
|
};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './networkConfigurations';
|