Replace Telegram widget with bot login
All checks were successful
Build and deploy Flutter Web / build (push) Successful in 2m22s
All checks were successful
Build and deploy Flutter Web / build (push) Successful in 2m22s
This commit is contained in:
@@ -11,6 +11,7 @@ class MapflowApi {
|
||||
http.Client? client,
|
||||
String? telegramInitData,
|
||||
String? telegramLoginData,
|
||||
String? mapflowSessionToken,
|
||||
String endpoint = const String.fromEnvironment(
|
||||
'API_BASE_URL',
|
||||
defaultValue: '/graphql',
|
||||
@@ -19,21 +20,43 @@ class MapflowApi {
|
||||
_telegramInitData = telegramInitData ?? telegram_auth.telegramInitData(),
|
||||
_telegramLoginData =
|
||||
telegramLoginData ?? telegram_auth.telegramLoginData(),
|
||||
_mapflowSessionToken =
|
||||
mapflowSessionToken ?? telegram_auth.mapflowSessionToken(),
|
||||
_endpoint = Uri.base.resolve(endpoint);
|
||||
|
||||
final http.Client _client;
|
||||
final String _telegramInitData;
|
||||
final String _telegramLoginData;
|
||||
final String _mapflowSessionToken;
|
||||
final Uri _endpoint;
|
||||
|
||||
bool get hasTelegramAuth =>
|
||||
_telegramInitData.isNotEmpty || _telegramLoginData.isNotEmpty;
|
||||
_telegramInitData.isNotEmpty ||
|
||||
_telegramLoginData.isNotEmpty ||
|
||||
_mapflowSessionToken.isNotEmpty;
|
||||
|
||||
Future<AppUser?> authenticateTelegram() async {
|
||||
if (!hasTelegramAuth) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (_mapflowSessionToken.isNotEmpty) {
|
||||
final data = await _graphql('''
|
||||
query Me {
|
||||
me {
|
||||
id
|
||||
telegramId
|
||||
username
|
||||
firstName
|
||||
lastName
|
||||
photoUrl
|
||||
languageCode
|
||||
}
|
||||
}
|
||||
''');
|
||||
return AppUser.fromJson(data['me'] as Map<String, dynamic>);
|
||||
}
|
||||
|
||||
if (_telegramLoginData.isNotEmpty) {
|
||||
final loginData = jsonDecode(_telegramLoginData) as Map<String, dynamic>;
|
||||
final data = await _graphql(
|
||||
@@ -88,6 +111,49 @@ class MapflowApi {
|
||||
return AppUser.fromJson(user);
|
||||
}
|
||||
|
||||
Future<TelegramBotLogin> startTelegramBotLogin() async {
|
||||
final data = await _graphql('''
|
||||
mutation StartTelegramBotLogin {
|
||||
startTelegramBotLogin {
|
||||
token
|
||||
botUrl
|
||||
expiresAt
|
||||
}
|
||||
}
|
||||
''');
|
||||
return TelegramBotLogin.fromJson(
|
||||
data['startTelegramBotLogin'] as Map<String, dynamic>,
|
||||
);
|
||||
}
|
||||
|
||||
Future<TelegramBotLoginStatus> fetchTelegramBotLoginStatus(
|
||||
String token,
|
||||
) async {
|
||||
final data = await _graphql(
|
||||
'''
|
||||
query TelegramBotLoginStatus(\$token: String!) {
|
||||
telegramBotLoginStatus(token: \$token) {
|
||||
status
|
||||
sessionToken
|
||||
user {
|
||||
id
|
||||
telegramId
|
||||
username
|
||||
firstName
|
||||
lastName
|
||||
photoUrl
|
||||
languageCode
|
||||
}
|
||||
}
|
||||
}
|
||||
''',
|
||||
variables: {'token': token},
|
||||
);
|
||||
return TelegramBotLoginStatus.fromJson(
|
||||
data['telegramBotLoginStatus'] as Map<String, dynamic>,
|
||||
);
|
||||
}
|
||||
|
||||
Future<List<PlaceRecommendation>> fetchPlaces() async {
|
||||
final data = await _graphql('''
|
||||
query Places {
|
||||
@@ -168,6 +234,8 @@ class MapflowApi {
|
||||
'x-telegram-init-data': _telegramInitData,
|
||||
if (_telegramLoginData.isNotEmpty)
|
||||
'x-telegram-login-data': _telegramLoginData,
|
||||
if (_mapflowSessionToken.isNotEmpty)
|
||||
'x-mapflow-session-token': _mapflowSessionToken,
|
||||
},
|
||||
body: jsonEncode({'query': query, 'variables': variables ?? {}}),
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user