@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.
Files changed (41) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/package.cjs +2 -2
  3. package/package.js +2 -2
  4. package/package.json +12 -12
  5. package/src/lib/components/QRCode/QRCode.cjs +2 -2
  6. package/src/lib/components/QRCode/QRCode.js +2 -2
  7. package/src/lib/components/SendBalanceForm/SendBalanceForm.cjs +5 -1
  8. package/src/lib/components/SendBalanceForm/SendBalanceForm.js +5 -1
  9. package/src/lib/components/TransactionConfirmationPageLayout/utils.cjs +5 -6
  10. package/src/lib/components/TransactionConfirmationPageLayout/utils.js +5 -6
  11. package/src/lib/context/DynamicContext/DynamicContext.cjs +14 -16
  12. package/src/lib/context/DynamicContext/DynamicContext.js +14 -16
  13. package/src/lib/data/api/oauth/oauth.cjs +14 -0
  14. package/src/lib/data/api/oauth/oauth.d.ts +1 -0
  15. package/src/lib/data/api/oauth/oauth.js +14 -1
  16. package/src/lib/store/internalImplementation/utils/clearExpiredData/clearExpiredData.cjs +1 -6
  17. package/src/lib/store/internalImplementation/utils/clearExpiredData/clearExpiredData.js +1 -6
  18. package/src/lib/store/stateConfig.cjs +0 -5
  19. package/src/lib/store/stateConfig.js +0 -5
  20. package/src/lib/store/types.d.ts +1 -6
  21. package/src/lib/styles/index.shadow.cjs +1 -1
  22. package/src/lib/styles/index.shadow.js +1 -1
  23. package/src/lib/utils/hooks/useNetworkConfigurationsFromProjectSettings/index.d.ts +1 -0
  24. package/src/lib/utils/hooks/useNetworkConfigurationsFromProjectSettings/useNetworkConfigurationsFromProjectSettings.cjs +63 -0
  25. package/src/lib/utils/hooks/useNetworkConfigurationsFromProjectSettings/useNetworkConfigurationsFromProjectSettings.d.ts +9 -0
  26. package/src/lib/utils/hooks/useNetworkConfigurationsFromProjectSettings/useNetworkConfigurationsFromProjectSettings.js +59 -0
  27. package/src/lib/utils/hooks/useResetCookieLocalStorage/useResetCookieLocalStorage.cjs +8 -1
  28. package/src/lib/utils/hooks/useResetCookieLocalStorage/useResetCookieLocalStorage.js +8 -1
  29. package/src/lib/utils/hooks/useSocialAuth/useSocialAuth.cjs +148 -114
  30. package/src/lib/utils/hooks/useSocialAuth/useSocialAuth.js +151 -117
  31. package/src/lib/utils/hooks/useTelegramLogin/useTelegramLogin.cjs +20 -7
  32. package/src/lib/utils/hooks/useTelegramLogin/useTelegramLogin.d.ts +1 -0
  33. package/src/lib/utils/hooks/useTelegramLogin/useTelegramLogin.js +20 -7
  34. package/src/lib/views/MfaChooseDeviceView/MfaChooseDeviceView.cjs +1 -1
  35. package/src/lib/views/MfaChooseDeviceView/MfaChooseDeviceView.js +1 -1
  36. package/src/lib/views/WalletList/data.cjs +6 -1
  37. package/src/lib/views/WalletList/data.js +6 -1
  38. package/src/lib/store/state/networkConfigurations/index.d.ts +0 -1
  39. package/src/lib/store/state/networkConfigurations/networkConfigurations.cjs +0 -169
  40. package/src/lib/store/state/networkConfigurations/networkConfigurations.d.ts +0 -10
  41. 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 { isMobile, Oauth2Service, PlatformService, SocialAccountAlreadyExistsError } from '@dynamic-labs/utils';
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 { getOAuthResult, initAuth, telegramSignIn, signInOAuth, telegramVerify, verifyOAuth, farcasterSignIn, farcasterVerify } from '../../../data/api/oauth/oauth.js';
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 connectSocialAccount = (_a) => __awaiter(void 0, [_a], void 0, function* ({ authMode, provider, validator, captchaToken, redirectUrl, telegramAuthToken, }) {
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
- const connectWithFarcaster = (authMode_1, _e) => __awaiter(void 0, [authMode_1, _e], void 0, function* (authMode, { captchaToken, redirectUrl }) {
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
- return {
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 telegramSignIn = (...args_1) => _tslib.__awaiter(void 0, [...args_1], void 0, function* ({ forceCreateUser = false, } = {}) {
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
- const telegramAuthToken = search.get('telegramAuthToken');
110
- if (!isProviderEnabled.isProviderEnabled(providers, sdkApiCore.ProviderEnum.Telegram) ||
111
- user ||
112
- !telegramAuthToken ||
113
- !sdkHasLoaded) {
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
  };
@@ -2,6 +2,7 @@ interface TelegramConfig {
2
2
  forceCreateUser?: boolean;
3
3
  }
4
4
  export declare const useTelegramLogin: () => {
5
+ isAuthWithTelegram: () => Promise<boolean | undefined>;
5
6
  telegramSignIn: ({ forceCreateUser, }?: TelegramConfig) => Promise<void>;
6
7
  };
7
8
  export {};
@@ -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 telegramSignIn = (...args_1) => __awaiter(void 0, [...args_1], void 0, function* ({ forceCreateUser = false, } = {}) {
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
- const telegramAuthToken = search.get('telegramAuthToken');
106
- if (!isProviderEnabled(providers, ProviderEnum.Telegram) ||
107
- user ||
108
- !telegramAuthToken ||
109
- !sdkHasLoaded) {
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) => wallet.extend(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) => wallet.extend(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';