mytglib 1.1.7 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -143,6 +143,8 @@ const response = await core.sendCode({
143
143
 
144
144
  reCAPTCHA 由客户端的全局 network middleware 处理,不限于 `auth.sendCode`。任意尚未包装且允许重放的 RPC 返回格式严格匹配 `403 RECAPTCHA_CHECK_<action>__<siteKey>` 时,middleware 会调用 `recaptchaMobileTokenResolver`,使用 `invokeWithReCaptcha` 包装原请求,并通过后续的 `networkMiddlewares.basic()` 链重试一次。`account.updatePasswordSettings` 和 `payments.assignAppStoreTransaction` 不会被该 middleware 自动重放;已有 `invokeWithReCaptcha` 请求或包装请求再次失败时也不会重复求解、再次包装或形成无限重试。middleware 自动生成的 `invokeWithReCaptcha` 日志记录错误文本、完整原请求、真实响应和错误。
145
145
 
146
+ Rust `grammers_core` 对初始 `auth.sendCode` 及其自动生成的 `invokeWithReCaptcha(auth.sendCode)` 额外设置完整 frame 写出后的 20 秒响应期限。连接类失败会先关闭当前 DC sender,再用同一序列化请求和同一 reCAPTCHA token 在新代理隧道上重放一次;明确的 Telegram RPC 错误、取消和第二次连接失败不会重放。该规则不改变 Node.js `@mtcute/node` 实现,也不适用于 `signIn`、`signUp` 或其他 RPC。
147
+
146
148
  `auth.sentCodePaymentRequired` 不是 RPC 错误,而是 `auth.sendCode` 的合法返回。它表示由于所在国家或运营商的短信验证成本较高,官方客户端必须先完成 Telegram Premium 购买流程才能继续登录或注册。原始响应中的 `storeProduct`、`premiumDays`、`currency` 和 `amount` 描述商品与价格,`phoneCodeHash` 保留后续授权上下文,`supportEmailAddress` 和 `supportEmailSubject` 用于联系支持。
147
149
 
148
150
  `sendCode()` 或 `verifyEmailCode()` 收到该响应时,会像保存 `phoneCodeHash` 一样把三个必需字段原子地挂载到 `core.inputStore`:`{ premiumDays, currency, amount }`。普通 `auth.sentCode`、`auth.sentCodeSuccess`、授权成功及成功销毁客户端时会清空该状态。
@@ -292,6 +294,7 @@ const testResult = await pool.testAccount(account.accountId);
292
294
  const status = await pool.getStatus();
293
295
 
294
296
  console.log(accounts, detail, testResult, status.runtime);
297
+ console.log(accounts.map(({ phone, cooldownUntil }) => ({ phone, cooldownUntil })));
295
298
 
296
299
  // 删除会先停止派单,等待该账号当前任务结束,再断开连接并删除持久化记录。
297
300
  const removed = await pool.removeAccount(account.accountId);
@@ -301,7 +304,8 @@ const removed = await pool.removeAccount(account.accountId);
301
304
  `BUSY`;触发 flood 的账号进入 `COOLDOWN`,认证失效等致命错误会进入 `QUARANTINED`。
302
305
  `testAccount()` 是账号健康自检:它使用 `users.getUsers(inputUserSelf)` 验证该账号的授权和身份,
303
306
  不会拿这个账号去检测某个外部手机号。验证成功会把隔离账号恢复为可调度状态。
304
- 管理接口返回的账号信息不会包含 auth key 或原始 Metadata,手机号也会被掩码。
307
+ 管理接口返回完整 `phone` 和 ISO 格式或 `null` 的 `cooldownUntil`,但不会包含 auth key、原始
308
+ Metadata、session 或其他连接凭据。
305
309
 
306
310
  `getStatus()` 可用于健康检查和后台展示,包含生命周期、账号库存、各运行态槽位数、当前目标、
307
311
  策略上限、资源上限、资源压力和建连并发等信息。若业务需要等待初始暖槽,可以在 API 对外接流量前
@@ -412,7 +416,8 @@ use grammers_core::{
412
416
  let tested = pool.test_account(&account.account_id).await?;
413
417
  let status = pool.get_status().await?;
414
418
  println!(
415
- "accounts={} detail={} tested={} ready={}",
419
+ "phone={} accounts={} detail={} tested={} ready={}",
420
+ account.phone,
416
421
  accounts.len(),
417
422
  detail.is_some(),
418
423
  tested.is_some(),
@@ -613,7 +618,10 @@ console.log(result);
613
618
 
614
619
  `vendor/grammers` 是为后续 Tauri/Rust 桌面端准备的内置 fork,其中项目自有的
615
620
  `grammers-core` 承载 `src` 对应的 Rust 实现。它目前尚未接入本 npm 包的 JavaScript 运行路径,
616
- 也不会进入 npm 发布包。上游基线、本地覆盖层、可重复的同步流程和验证范围见
621
+ 也不会进入 npm 发布包。Rust `CoreClient` 在 backend 连接初始化尚未完成、没有业务 transport frame
622
+ 写出时,若初始化明确超时会自动重新创建一次 backend;该限定重试独立于 RPC 的 `max_retry_count`。
623
+ 上游基线、本地覆盖层、
624
+ 可重复的同步流程和验证范围见
617
625
  [grammers fork 维护文档](docs/grammers-fork.md)。
618
626
 
619
627
  ## 测试