diff --git a/src/handlers/TelegramHandler.ts b/src/handlers/TelegramHandler.ts index 9283bec6..61c97482 100644 --- a/src/handlers/TelegramHandler.ts +++ b/src/handlers/TelegramHandler.ts @@ -2,7 +2,7 @@ import base64url from "base64url"; import deepmerge from "deepmerge"; import { UX_MODE } from "../utils/enums"; -import { broadcastChannelOptions, getTimeout, validateAndConstructUrl } from "../utils/helpers"; +import { broadcastChannelOptions, getTimeout, objectToAuthDataMap, validateAndConstructUrl } from "../utils/helpers"; import log from "../utils/loglevel"; import PopupHandler from "../utils/PopupHandler"; import AbstractLoginHandler from "./AbstractLoginHandler"; @@ -60,13 +60,9 @@ export default class TelegramHandler extends AbstractLoginHandler { this.finalURL = finalUrl; } - objectToAuthDataMap(tgAuthenticationResult: string) { - return JSON.parse(atob(tgAuthenticationResult)) as { first_name: string; last_name: string; photo_url: string; username: string; id: number }; - } - async getUserInfo(params: LoginWindowResponse): Promise { const { idToken } = params; - const userInfo = this.objectToAuthDataMap(idToken); + const userInfo = objectToAuthDataMap(idToken); const { photo_url: profileImage = "", first_name = "", last_name = "", id } = userInfo; return { email: "", // Telegram does not provide email diff --git a/src/login.ts b/src/login.ts index 4e7da7ee..512aa28a 100644 --- a/src/login.ts +++ b/src/login.ts @@ -232,9 +232,9 @@ class CustomAuth { if (hash && queryParameters) { const { error, hashParameters, instanceParameters } = handleRedirectParameters(hash, queryParameters); if (error) throw new Error(error); - const { access_token: accessToken, id_token: idToken, ...rest } = hashParameters; + const { access_token: accessToken, id_token: idToken, tgAuthResult, ...rest } = hashParameters; // State has to be last here otherwise it will be overwritten - loginParams = { accessToken, idToken, ...rest, state: instanceParameters }; + loginParams = { accessToken, idToken: idToken || tgAuthResult || "", ...rest, state: instanceParameters }; } else { this.storageHelper.clearOrphanedLoginDetails(); if (this.config.uxMode === UX_MODE.REDIRECT) { diff --git a/src/utils/helpers.ts b/src/utils/helpers.ts index 8d949e94..434de0cc 100644 --- a/src/utils/helpers.ts +++ b/src/utils/helpers.ts @@ -207,6 +207,10 @@ export const validateAndConstructUrl = (domain: string): URL => { } }; +export const objectToAuthDataMap = (tgAuthenticationResult: string) => { + return JSON.parse(atob(tgAuthenticationResult)) as { first_name: string; last_name: string; photo_url: string; username: string; id: number }; +}; + export function isMobileOrTablet(): boolean { const browser = Bowser.getParser(navigator.userAgent); const platform = browser.getPlatform();