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); await loginWithTelegramOIDC(data.id_token);
navigate('/'); navigate('/');
} catch (err: unknown) { } catch (err: unknown) {
const error = err as { response?: { data?: { detail?: string } } }; let message = t('common.error');
setOidcError(error.response?.data?.detail || 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 { } finally {
setOidcLoading(false); setOidcLoading(false);
} }
@@ -61,7 +65,7 @@ export default function TelegramLoginButton({ referralCode }: TelegramLoginButto
if (window.Telegram?.Login) { if (window.Telegram?.Login) {
window.Telegram.Login.init( 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, request_access: widgetConfig.request_access ? ['write'] : undefined,
lang: document.documentElement.lang || 'en', lang: document.documentElement.lang || 'en',
}, },

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

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