fix: safe error handling and numeric client_id in OIDC login

- Replace unsafe `as` cast with runtime type guard
- Pass client_id as Number() per Telegram OIDC spec
- Update TypeScript type to string | number
This commit is contained in:
Fringg
2026-03-07 03:04:46 +03:00
parent 5c11f1251a
commit 45e68ffac2
2 changed files with 8 additions and 4 deletions

View File

@@ -43,8 +43,12 @@ export default function TelegramLoginButton({ referralCode }: TelegramLoginButto
await loginWithTelegramOIDC(data.id_token);
navigate('/');
} catch (err: unknown) {
const error = err as { response?: { data?: { detail?: string } } };
setOidcError(error.response?.data?.detail || t('common.error'));
let message = t('common.error');
if (err && typeof err === 'object' && 'response' in err) {
const resp = (err as { response?: { data?: { detail?: string } } }).response;
if (resp?.data?.detail) message = resp.data.detail;
}
setOidcError(message);
} finally {
setOidcLoading(false);
}
@@ -61,7 +65,7 @@ export default function TelegramLoginButton({ referralCode }: TelegramLoginButto
if (window.Telegram?.Login) {
window.Telegram.Login.init(
{
client_id: widgetConfig.oidc_client_id,
client_id: Number(widgetConfig.oidc_client_id) || widgetConfig.oidc_client_id,
request_access: widgetConfig.request_access ? ['write'] : undefined,
lang: document.documentElement.lang || 'en',
},

2
src/vite-env.d.ts vendored
View File

@@ -23,7 +23,7 @@ interface TelegramWebAppGlobal {
interface TelegramLoginGlobal {
init: (
options: {
client_id: string;
client_id: string | number;
request_access?: string[];
lang?: string;
},