12 KiB
12 KiB
更新日志
本项目的重要改动都记在这里。格式参考 Keep a Changelog, 版本号遵循 语义化版本。
发版时用 node tools/release.mjs patch|minor|major:它会把下面这段「未发布」的内容
自动归到新版本号下面,并留出新的空白区 —— 所以平时往「未发布」里随手记就行。
[未发布]
新增
修复
[2.20.0] - 2026-10-01
新增
- 后台凭据自动续期:独立于签到流程,调度器每小时扫一遍账号,做两件事——① 有 renew() 的站点(如 Akile):快过期的凭据提前换新并回写(Akile 先接入:到期前 12 小时触发);② 纯 Cookie 的站点(没有刷新接口、面板手里也没密码,技术上续不了):凭据里写着到期时间的(WordPress 会话 / JWT),剩不到 24 小时就提前预警,提醒去重新抓(每天每个账号一次)。天翼云盘、V2Board 存的是账号密码、每次签到本来就是重新登录,天生不会"过期",不需要续。
- 续期走「扩展在线先走用户本地网络、再直连兜底」两条路线;只有「网络失败」才换路线重试,「站点拒绝」直接记原因不再空试。
- 续期状态可视化:账号站点名悬浮提示新增「自动续期:上次成功 …」/「自动续期失败(原因 + 详情 + 每小时重试说明)」;失败且凭据剩不到 6 小时就过期时推送提醒(每天一次),不等死了才让用户手动。
修复
- Akile 续期失败原因不再「一律吞掉」:区分「网络没通」(值得重试)和「站点拒绝」(旧 token 已死),后台续期失败会记下具体原因(HTTP 状态 + 网站回馈),而不是第二天莫名其妙报「请重新获取」。签到主流程的报错文案保持不变。
[2.19.1] - 2026-09-30
新增
修复
- Cloudflare 构建失败:Telegram 签到(Docker 专属)的 gramjs 动态 import 被 esbuild 静态分析到,试图把 net/fs 等 Node 内置模块打进 Workers 包,导致 v2.18.0 起所有 CF 构建失败、线上一直停在 v2.17.1。现改用变量拼模块名让打包器跳过(Workers 上该路径本就被 requiresNode 拦截、永远不会执行;Docker/Node 运行时 import 验证通过)。
[2.19.0] - 2026-09-30
新增
- Docker 版界面适配:没有「Cloudflare 机房」这条路线,界面全部换成诚实的叫法。「CF 网络」→「本机直连」(NAS 家庭 IP 直接请求),「本地网络」→「浏览器中继」(扩展在真实浏览器标签页里代发请求,真浏览器指纹 + 你的登录态)。执行方式徽章、切换按钮文案、站点提示(NodeSeek/吾爱/糊涂鳄/看雪/Discuz/V2EX)、失败诊断建议、出口检测说明、设置页扩展说明,全部按运行环境(
RUNTIME)自动切换;Cloudflare 版保持原样。
修复
- Docker 版 NodeSeek 报「人机验证」时不再胡说「切换到 CF 网络」:本机直连用的是程序指纹,过不了真人检测,诊断现在会直接建议把该账号切到「浏览器中继」。
[2.18.0] - 2026-09-30
新增
- Docker 运行方式:一套代码两种跑法,
docker compose up -d即可在本地/NAS/服务器上跑面板。docker/server.mjs把 Worker 的 fetch/scheduled 原样跑在 Node 24 上,docker/adapter.mjs用 Node 内置node:sqlite实现 D1 兼容层(prepare/bind/run/all/first/batch,batch 事务性),静态资源走public/目录并沿用public/_headers头规则与 SPA 回退。数据全在./data/checkin.sqlite一个文件里,备份拷走就行。ENCRYPT_KEY 可选(不填面板自动生成存库,openssl rand -base64 32生成)。CI(.github/workflows/docker.yml)在每次 push 后自动构建多架构镜像(amd64+arm64)推送到 Docker Hub(nameguoguo/daily-checkin-panel),不需要人工docker push;服务器上docker compose pull && docker compose up -d更新,或加--profile auto-update让 watchtower 全自动更新。说明见docker/README.md。 - Telegram 签到(Docker 版专属):用 MTProto(gramjs)以「你的 Telegram 账号」身份,给指定的 TG 机器人/群发签到指令(如
/checkin),读 bot 回执判定成功/已签到。Cloudflare Workers 没有 TCP socket 跑不了这个,所以新站src/sites/telegram.js声明了requiresNode,runner 在 Workers 上会直接给明确提示("需要 Docker 版")而不空转重试。首次用docker exec -it <容器> node docker/telegram-login.mjs交互登录一次拿 Session(api_id/api_hash 去 my.telegram.org 申请),粘到面板账号里即可。Dockerfile 构建时npm install装telegram依赖(CI 自检不需要装,模块里是动态 import)。步骤见docker/README.md「Telegram 签到」。 - Docker 默认改用 host 网络模式:容器直接用主机的网络栈,拿到 IPv6 出口。之前默认的 bridge 是纯 IPv4,而 NodeSeek 会把无 IPv6 的请求踢到 IPv6 提示页,导致 Docker 直连签到也失败(和 CF 机房一样)。Mac/Windows 的 Docker Desktop 不支持 host 模式,请用 Linux 主机;改回 bridge 的方法写在
docker-compose.yml注释和docker/README.md「网络模式」里。 - README 文档表新增 NodeSeek 使用反馈收集帖。
修复
[2.17.1] - 2026-09-30
新增
修复
- 扩展「录制签到」回填:录制完跳回面板时,「添加账号」弹窗的站点错选成了 夸克网盘(下拉框重建把预设的「自定义 HTTP」吞掉了),录制的请求地址 / 方法 / 请求头全填不进去还静默丢失。现在先开弹窗再选站点,表单正确预填。
[2.17.0] - 2026-09-30
新增
- 扩展录制小日志(需扩展 2.21+):录制结束时扩展向面板发送一条小日志, 「日志」页直接能看到抓到了什么、错在哪 —— 抓到请求(方法/域名/请求头数量/ 请求体大小)、90 秒超时无抓获、交接失败都会记。只记请求头名字(不记 Cookie 等凭据值),日志只留最近 100 条。
修复
- 账号状态栏:状态徽章(未签到/已签到/待确认)与「🕘 UTC 日界」胶囊改为竖向排列,
badge 在上、胶囊在下,窄屏不再挤压。日界胶囊按站点自己的
dayTz自动显示 (目前只有糊涂鳄声明了UTC)。 - 定时签到重试间隔跨 0 点算错:
shouldRun以前只比「当天第几分钟」,上次尝试在 昨天 23:xx、现在是今天 00:0x 时会算出负间隔,误判成「刚重试过」→ 该补跑的不补跑。 改为按完整日期算真实间隔。
[2.16.0] - 2026-09-29
新增
- 扩展「发送到面板」自动识别站点类型(需扩展 2.20+):扩展在采集 Cookie 的同时 给当前页面做指纹(页面特征 + Cookie 名 + localStorage 键 + 域名),判定后随交接包发面板。 高置信(如 69 机场识别为 V2Board、WordPress 站识别为糊涂鳄、localStorage 有 akile-token 识别为 Akile)直接用,不再让人手动选站点;中等置信只做推荐预选,决定权还在人手里。 V2Board 这类无 Cookie 字段的站点以前在手动列表里根本选不到,现在会直接打开 「添加账号」并预填好域名,只需补邮箱和密码。
- 扩展弹窗采集完会显示识别结果(🔍 已识别:V2Board 机场),认不出也会明说。
修复
[2.15.0] - 2026-09-29
新增
- 扩展「🎬 录制签到请求」(需扩展 2.19+):在陌生网站上亲手点一次签到, 扩展用 webRequest 抓下那次请求的 method / URL / 请求头 / 请求体, 经一次性交接码发到面板,自动打开「添加账号 → 自定义 HTTP」并预填好 —— 陌生站点适配不用再开 F12 复制 cURL。
- 失败自诊断:签到失败时日志自动追加一句「💡 诊断」, 按登录失效 / 人机验证 / WAF / 限流 / 超时 / 扩展不在线等情形给出可直接照做的建议。
- 新增陌生站点适配成功率说明(
docs/适配成功率.md):五档估计与提高成功率的办法。
修复
- (无)
[2.14.0] - 2026-09-29
新增
- 凭据包补全页面地址:扩展「一键复制」现在附带采集时的完整页面 URL(
pageUrl), 面板粘贴解析并在站点声明page_url字段时自动填入 —— 给以后「Cookie + UA + Referer 三件套校验」的特殊站点留好采集链路(借鉴 OpenList 凭据包思路)。 - 服务端 Set-Cookie 静默回写:签到成功后站点可通过
res.cookieRefresh带回网站轮换的 新 Cookie,执行引擎合并进凭据加密存回 D1(自定义 HTTP / 社区站点自动生效,V2EX 已接入; 失败时不回写,回写失败不影响签到结论)。 - 扩展 2.17 → 2.18:凭据包新增
pageUrl字段(采集时的完整页面地址)。
修复
- 午夜时段签到误判:旧版 ICU 下
Intl.DateTimeFormat在 00 点返回小时"24", 导致每天 00:00–00:59 的签到时刻判断整体错位 1440 分钟、该时段定时签到被静默跳过。tzParts现把"24"归一化为"00"(另补回归测试,CI 的 Node 20 已验证通过)。
[2.11.0] - 2026-09-29
新增
- 全局签到卡右侧新增「网络连接状态」一行:阿里 / 谷歌 / Facebook / GitHub / Telegram / 百度 逐个探一遍,一眼看出是「面板出口不通」还是「某个站点自己的问题」(只探连通性,不发数据)。
- 一键发版与自动化:
node tools/release.mjs(自检 → 升版本号 → 写更新日志 → 打发布包)、node tools/pack-zip.mjs(单独打发布包,带 SHA-256)、GitHub Actions 自检与 Tag 自动发 Release。 - 新增 docs/Cloudflare部署清单.md:D1 存储叫什么名字、 要加哪些变量/密钥、每一项填什么,照着抄即可。
- 安全审计(对照成熟项目的常见坑逐条过):出站请求的每一次跳转都重新过闸门、 中继不许打内网、首装与登录加同源校验、社区配置字段限字符集与协议、账号必填项校验、 中继回传加体积上限。
修复
node deploy.mjs --check以前在没登录时会去拉起浏览器授权流程(CI 里会挂到超时)—— 它现在是真的只读:没登录只提示一句,依赖登录的检查跳过并说明。node tools/pack-zip.mjs单独跑时不会创建release/目录,会直接报 ENOENT。
变更
- 全局签到卡压成一行(高度 300px → 119px),说明收进「💡 说明」气泡,不再常驻版面。
- 文档瘦身:README 255 → 166 行、详细手册 803 → 325 行(README 只讲怎么做,手册讲为什么与怎么排错)。
[2.10.0]
- 账号页的「浏览器扩展」板块整体搬进设置页(详细介绍、下载、安装步骤、API Key 集中在一张卡); 全局签到不再左右分栏(时间/时区上下排,选好即自动保存,去掉保存按钮)。
- API Key 改成「只在生成时显示一次」,之后再想查看只能重新生成。
- 站点名悬浮显示凭据自带的有效期(WordPress 会话 / JWT 的 exp),凭据原文不下发到页面。
- 导出配置改成按签到网站选择(不再按账号);导入导出不含任何个人 Cookie 明文。
[2.9.0] 及更早
- 早期版本的改动没有逐条存档。想看某次具体改了什么,可以对着仓库的提交记录(
git log)翻。