feat: отправка chatCacheFingerprint и exp в login-пакете (opcode 19)

This commit is contained in:
klockky
2026-06-02 17:09:23 +00:00
parent 1d3a7306a5
commit ddcdcf5a36
6 changed files with 75 additions and 6 deletions
+9
View File
@@ -39,6 +39,12 @@ class Api {
Map<dynamic, dynamic>? get userAgent => _userAgent;
int? _callsSeed;
String? _deviceId;
int? get callsSeed => _callsSeed;
String? get deviceId => _deviceId;
List<CountryName>? _registrationCountries;
List<CountryName> get registrationCountries =>
@@ -111,6 +117,7 @@ class Api {
try {
final response = await sendHandshake();
if (response.isOk) {
_callsSeed = response.payload['callsSeed'] as int?;
_registrationCountries = _parseRegistrationCountries(response.payload);
_setSessionState(SessionState.online);
_startPinging();
@@ -242,6 +249,8 @@ class Api {
'buildNumber': buildNumber,
};
_deviceId = deviceId;
final payload = <dynamic, dynamic>{
'mt_instanceid': await DeviceIdentity.instanceId(),
'clientSessionId': DeviceIdentity.clientSessionId,
+12 -4
View File
@@ -1,6 +1,8 @@
import 'dart:async';
import 'dart:convert';
import 'dart:typed_data';
import '../api.dart';
import '../../core/protocol/chat_cache_fingerprint.dart';
import '../../core/protocol/opcode_map.dart';
import '../../core/protocol/packet.dart';
import '../../core/storage/app_database.dart';
@@ -1048,9 +1050,18 @@ class AccountModule {
final payload = <dynamic, dynamic>{
'token': token,
'interactive': true,
if (_api.userAgent != null) 'userAgent': _api.userAgent,
'exp': {
'chatsCountGroups': Uint8List.fromList([0x0b, 0x32]),
},
};
final callsSeed = _api.callsSeed;
final deviceId = _api.deviceId;
if (callsSeed != null && deviceId != null) {
payload['chatCacheFingerprint'] =
ChatCacheFingerprint.compute(callsSeed, deviceId);
}
if (sync != null) {
payload['presenceSync'] = sync.presenceSync;
payload['chatsSync'] = sync.chatsSync;
@@ -1060,9 +1071,6 @@ class AccountModule {
payload['bannersSync'] = sync.bannersSync;
payload['lastLogin'] = sync.lastLogin;
if (sync.configHash != null) payload['configHash'] = sync.configHash;
if (sync.chatCacheFingerprint != null) {
payload['chatCacheFingerprint'] = sync.chatCacheFingerprint;
}
} else {
payload['presenceSync'] = 0;
}