Changelog
All notable changes to opentele2. The format is based on
Keep a Changelog , and releases are tagged X.Y.Z
following Semantic Versioning . The same notes are in
CHANGELOG.md .
2.0.0
Highlights
- One Rust core,
opentele2-core, holds every tdata format, session format, device catalog, API profile, fingerprint rule and the MTProto client crypto, shared by one package per ecosystem: PyPIopentele2(Python 3.8+, abi3 wheels), npmopentele2(Node 18+, subpathsopentele2/mtcuteandopentele2/telethon) and the cratesopentele2-core,opentele2-browser,opentele2-versionsandopentele2-grammers. - Telegram Desktop 7.3.1 tdata read and write, including passcode-locked 7.3 folders (Argon2id and scrypt passcode wraps), several accounts per folder and the stored MTP config.
- Sessions for Telethon (string,
.session+.json), mtcute (string session v3) and grammers 0.11, and tdata back from a client session, in every ecosystem. - QR login with 2FA, session admin and the seven consistency checks on each ecosystem’s own
client: Telethon in Python, mtcute in Node, grammers in Rust (feature
client). opentele2-browser(Apache-2.0): browser HTTP headers and full fingerprints from the Apify fingerprint datapoints, based on browserforge, deterministic by seed and byte-identical in Rust, Python (opentele2.browser) and Node (generateHeaders,generateFingerprint). It fixes seven browserforge defects: Sec-Fetch values, OS relaxation, HTTP/1 fallback, Edge detection, the user-agent constraint, the locale cap and request-dependent headers.opentele2-versionsfetches the current Telegram Desktop, Android, Telegram X, iOS, macOS, Web K and Web A versions plus stable Chrome and Firefox.- Client crypto on the core: Telethon gets AES-IGE through
cryptg(registered when the realcryptgis absent) and a bridge for AES-CTR, PQ factorisation, SHA-1/256 and password hashing; mtcute gets a completeICryptoProviderfromcreateCryptoProvider(). - Measured on one machine: a one-account tdata folder loads in 0.24 ms against 1.08 ms for the pure-Python loader of 1.5.0 (best of 3 x 200 loads); AES-CTR on 1 MiB takes 0.9 ms against 3.6 s with pyaes.
Breaking changes
Python package
opentele2is a native wheel built from the Rust core; its extension module isopentele2._native.- The dependencies
browserforge,selectolax,TgCrypto-pyroforkandargon2-cffiare dropped; the package depends ontelethonand, below Python 3.10,typing_extensions. - Web devices come from a pool drawn with
opentele2-browserinstead of a curated catalog, and are deterministic perunique_idand per Chrome/Firefox major;opentele2.browseroutput is deterministic perseed. - msg_id offsets and flow delays come from the OS random source, so
random.seedno longer reproduces them. - Removed internals:
td.MTP,td.MapData,td.Serialize,td.Storage,td.StorageAccount; the modulesqt_compat,utils,debugand the public module pathversion_fetcher;Account.MapData,Account.prepareToStart,Account.serializeMtpAuthorization,AuthKey.writeandAuthKey.FromStream. AuthKey.prepareAES_oldmtpraises on a bad key or msg_key length.- DC ids are plain
int. - A new account takes the lowest free index; 1.5.0 used the account count, which could collide with an existing index.
- Saving refuses duplicate account indices, and more accounts than six or than the folder loaded
(whichever is larger), with
TDataSaveFailed. - Renaming the key file of a multi-account folder writes per-account file names; 1.5.0 overwrote the accounts with one another.
MtpConfigViewendpoint keys are the strings"ipv4","ipv6"and"tcp".deviceListand the other catalog lists return fresh read-only copies.- SRP failures carry the core’s error text.
Node package
- When the new mtcute client already holds a session of another
api_id, that session is replaced locally (EXISTING_SESSION_REPLACED), as the Python package does. - A 2FA password without SRP inputs (
srpId,srpB) ends inOT_SRP_BAD_B, as in Python. initConnectionsendsparamswithtz_offsetfor the Telegram Desktop profile.accountMtpConfigandaccountEndpointsreturn the production default without an account.fetchVersionsrejects atimeoutMsthat is not a positive number.- A loosely typed
.jsoncompanion loads withprofilenull.
Rust (opentele2-grammers)
client::run_consistency_checksreturns the coreConsistencyReport.- grammers 0.11 sends an empty
lang_packand noparamsorproxyininitConnection, and its QR login does not wait forupdateLoginToken.
The reference lists the 2.0.0 API of every package.
Last updated on