Files
flutter/lib/auth/telegram_session_web.dart
Ruslan Bakiev a8b6aa6e02
All checks were successful
Build and deploy Flutter Web / build (push) Successful in 2m18s
Complete Telegram bot login from callback URL
2026-05-13 19:36:09 +07:00

48 lines
1.3 KiB
Dart

import 'dart:js_interop';
import 'package:web/web.dart' as web;
const telegramLoginStorageKey = 'mapflow.telegramLoginData';
const mapflowSessionStorageKey = 'mapflow.sessionToken';
@JS('window.Telegram.WebApp.initData')
external JSString? get _telegramInitData;
@JS('JSON.stringify')
external JSString _jsonStringify(JSAny? value);
String telegramInitData() => _telegramInitData?.toDart ?? '';
String telegramLoginData() =>
web.window.localStorage.getItem(telegramLoginStorageKey) ?? '';
String mapflowSessionToken() =>
web.window.localStorage.getItem(mapflowSessionStorageKey) ?? '';
String telegramLoginTokenFromUrl() {
final uri = Uri.parse(web.window.location.href);
return uri.queryParameters['telegram_login'] ?? '';
}
void saveTelegramLoginData(JSAny? user) {
final encoded = _jsonStringify(user).toDart;
web.window.localStorage.setItem(telegramLoginStorageKey, encoded);
}
void saveMapflowSessionToken(String token) {
web.window.localStorage.setItem(mapflowSessionStorageKey, token);
}
void clearMapflowSession() {
web.window.localStorage.removeItem(mapflowSessionStorageKey);
web.window.localStorage.removeItem(telegramLoginStorageKey);
}
void openExternalUrl(String url) {
web.window.location.assign(url);
}
void reloadApp() {
web.window.location.assign(web.window.location.origin);
}