Skip to content

feat(meoo): 新增 Meoo 秒悟网页会话线——每日首登积分自动领取 + 积分余额 - #63

Merged
techysy merged 1 commit into
techysy:mainfrom
Duseus:feat/meoo-daily-login
Nov 13, 2026
Merged

techysy merged 1 commit into
techysy:mainfrom
Duseus:feat/meoo-daily-login

Conversation

@Duseus

@Duseus Duseus commented Nov 13, 2026

Copy link
Copy Markdown
Contributor

做了什么

新增 Meoo 秒悟(meoo.com,阿里云) 网页会话线:每日首登积分自动领取 + 积分余额展示。按 WPS 灵犀(#53)的接入方式接线,改动保持最小。

为什么

Meoo 每天首次登录网页端会发放首登积分(当前 2000/天,约 6~7 天后过期;Free 套餐没有月度积分),不登录就领不到。发放是网页前端登录后调用 GET /api/mc/entitlement/init 触发的,用会话 cookie 就能每天代调一次,不需要人工打开网页。

怎么做的

  • src/meooClient.js(新增)
    • checkinMeoo:调 GET /api/mc/entitlement/init(带 meoo.com 会话 cookie)。
      • dailyLoginGranted=true 且金额 > 0 → checked-in(+N 积分)。
      • 已初始化但本次没有发放 → already(多为当天网页端已登录过)。
      • initialized=false → 按前端同款退避重查(500/1000/2000ms),仍未就绪记 failed,下一轮签到会自动重试。
    • 会话失效处理:HTTP 401/403、业务码 NEED_LOGIN / LOGIN_INVALID、user/me 返回 need_login=true,都按「会话已失效,请到『网页会话』页重新登录 meoo.com 并捕获」处理。签到线记 failed(带 authExpired),不抛异常,也不重试、不猜。
    • fetchMeooQuota:余额取 GET /api/mc/entitlement/get 的 userPointInfo.account.availableBalance。有 activeGrants 时逐笔列出 parts(来源 DAILY_LOGIN / INVITE_REWARD / SUBSCRIPTION、剩余、到期日),没有时显示单行余额。
    • 身份取 GET /api/v1/user/me 的 user_id,用于多号归户;行名按前 3 后 3 脱敏(与灵犀 uid 同口径)。username / email 可能是手机号,不读取、不落盘。
  • cookieSites.js:登记 meoo 站点(loginUrl https://meoo.com、`cookieUrls` meoo.com、verify:'api'、no10rSync:true,首版不推 10Router 卡)。
  • 接线
    • constants(PROVIDERS / 标签 / productOf)、providers(checkin + quota)、checkin.js 领取日志单位。
    • daemon.js:
      • 捕获分支:权益接口兼做探测,401 直接拒绝。
      • 就地重探分支。
      • quota 单位 秒悟积分:独立口径,不计入剩余积分合计。
      • todayByProduct.meoo:0 点翻日。
      • no10rSync 站点不进重探推卡名单,/api/cookie-sites 回显 no10rSync。
    • panel.html:网页会话卡加「立即签到」(FREE_CHECKIN_SITES),显示积分余额胶囊和最早到期日。
  • 捕获和重探都只读,不调用 init;发放动作只在签到线上执行。
  • 其他:i18n 四语词条(check-i18n 通过)、README 站点表与目录、package.json description、release-check 别名。

凭据说明

  • 凭据是 meoo.com 网页会话 cookie(阿里云 SSO,手机号 + 短信登录),和灵犀 / 魔搭一样,通过「网页版」登录窗或「粘贴捕获」录入,只存本机。
  • Meoo CLI 的 OAuth Bearer 不能用:/api/mc/* 带 Bearer 一律返回 NEED_LOGIN。
  • 会话有效期目前未知。失效时卡片显示红灯,并提示重新登录捕获。

测试

  • 新增 test/meoo.test.js,12 例,用 mock fetch,覆盖:
    • 首登发放、已发放、initialized 退避重查及上限
    • 401 与 200+NEED_LOGIN 两种失效形态、无 cookie
    • 权益解析(余额 / 套餐 / 每日额度 / 逐笔到期)、quota 兜底、身份与脱敏
    • 站点 / provider 接线
  • node --test 全量 454 例:446 pass / 0 fail / 8 skip(Node 22 与 Node 24 各跑一遍)。
  • node scripts/check-i18n.js 全部覆盖。
  • 本地起 daemon 用 stub fetch 跑通全流程:
    • 捕获入库,行名为脱敏 user_id,重复捕获按身份归户不新增行
    • 就地重探、手动签到(首次 checked-in,第二次 already)、quota 带单位
  • 用假 cookie 打真实 meoo.com:捕获返回 401,日志记 NEED_LOGIN,处理正确。
  • 未用真实会话做端到端领取验证:还没有可用于 CI 的测试账号。

- 新增 src/meooClient.js:
  - 签到 = 调网页端同款 GET /api/mc/entitlement/init 触发每日首次登录积分发放
    (dailyLoginGranted → checked-in +N;已初始化无发放 → already;
    initialized=false 按前端同款退避重查,仍未就绪记 failed 下轮重试)
  - 会话失效(HTTP 401 / errCode NEED_LOGIN|LOGIN_INVALID / user/me need_login)
    统一记 failed 并提示到「网页会话」页重新登录捕获,不重试、不猜
  - 余额 = /api/mc/entitlement/get 的 userPointInfo.account.availableBalance,
    activeGrants 有则逐笔出 parts(来源 / 剩余 / 到期日)
  - 身份 = /api/v1/user/me 的 user_id(多号归户,展示前3后3脱敏)
- cookieSites 登记 meoo 站点(verify:'api',cookieUrls meoo.com,no10rSync)
- constants / providers / checkin 单位 / daemon(捕获、就地重探、quota 单位、
  todayByProduct 日界)/ panel(网页会话卡「立即签到」+ 积分余额胶囊)接线
- 捕获与重探只读,不调 init;发放动作只走签到线
- i18n 四语词条、README 站点表、package.json description、release-check 别名
- 新增 test/meoo.test.js(12 例,mock fetch)
@techysy

techysy commented Nov 13, 2026

Copy link
Copy Markdown
Owner

审查通过,实现质量很高,几处确认点说明:

已验证

  • ✅ 全量测试 454 例通过(本地实测,含新增 12 例 meoo);check-i18n 四语门禁通过;panel.html 内联脚本语法校验通过
  • ✅ 与 main(9fcfaa7)无合并冲突
  • ✅ isAutoGeneratedName 对 Meoo 秒悟(xxx****xxx) 形态自动名家族覆盖正确(手改名保护双闸生效)
  • ✅ 单位 秒悟积分 走 UNIT_BY_SITE / CHECKIN_UNIT,不进仪表盘剩余积分合计(isCreditUnit 口径正确)
  • ✅ 凭据面干净:只存 cookie,user/me 的 username/email(可能是手机号)不落盘;buildExportPayload 不会带走 meta
  • ✅ 捕获/重探只读、发放只在签到线的边界设计合理,避免重复触发

两个小问题(不阻塞合并,可后续跟进)

  1. meooGet 对 fetchJsonRace 依赖:Meoo 若与 Token Harbor 同样有边缘节点封锁,出口代理配置(preferProxy)目前未暴露——暂无用户反馈前先不动,真有墙再加。
  2. 会话寿命未知:建议在 wiki 或 hint 里补一句「失效属正常现象,重新登录捕获即可」,降低用户困惑(hint 已写,够用,此条只是记录)。

好活,merge。💪

@techysy
techysy merged commit 0332460 into techysy:main Nov 13, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants