zcbot/web/static/js
caoqianming f7e5a80ed9 feat(auth): JWT 滑动续签——活跃用户临期无感换 token,不再因 7d TTL 掉线(bump 0.58.39)
原状:无状态 HS256 JWT(默 7d TTL)无任何续签路径,过期即 401——platform 靠
PLATFORM_KEY 自行重换,SPA 用户只能重输密码。判断:平台层握长期 PLATFORM_KEY、
login 本就幂等换发,缺的不是 refresh token 而是"无感重换"这层;放鉴权中间件一次
改动同时惠及 platform 层与 SPA,且纯加法契约。

- web/auth.py:AuthConfig 加 refresh_threshold_seconds(env
  ZCBOT_JWT_REFRESH_THRESHOLD_SECONDS,默 TTL 的 1/4,设 0 关闭);verify_token
  拆出 decode_token+_uid_from_payload;require_user/admin 共用 _authenticate,
  注入 Response,临期就地 mint 新 token 放响应头 X-Refreshed-Token /
  X-Token-Expires-At(仅续未过期的,已过期先抛 401)
- web/app.py:CORS 加 expose_headers 放行两头,否则浏览器 fetch 读不到
- web/static/js/api.js:中央 api() 封装 absorbRefreshedToken——任一响应带新
  token 就无感换 state.token+localStorage
- 验证:4 case 全绿(fresh 不续/临期续且 exp 正确延长/已过期仍 401/阈值 0 关闭)

顺带:EMBED.md 收敛为纯 platform iframe 对接文档——删企业微信免登 §9(实质併入
RUN.md 企微段「应用主页免登」的内部链路)、校准 §3 换 token 返回体过期字段、补
滑动续签说明;新 env 进 RUN.md、用户可感知条目进 CHANGELOG。

additive,不改字段语义/URL/DB schema;WS ASR 路径 verify_token 签名不变。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-18 10:21:35 +08:00
..
admin.js feat(ops): toolfail 聚集加时间分布,活跃/已安静一眼分(bump 0.58.14) 2026-07-13 09:27:40 +08:00
api.js feat(auth): JWT 滑动续签——活跃用户临期无感换 token,不再因 7d TTL 掉线(bump 0.58.39) 2026-07-18 10:21:35 +08:00
auth.js feat(wecom): 企业微信应用主页免登进 embed 控制台(bump 0.44.0) 2026-07-07 10:09:52 +08:00
changelog.js feat(changelog): 用户版更新日志 CHANGELOG.md + /v1/changelog + 点版本号弹层(bump 0.55.0) 2026-07-09 16:49:26 +08:00
chat.js fix(channel-push): 定时简报产物文件链接点开 404——推送端收敛为相对 rel + 前端识别完整 URL 兜底历史(bump 0.58.38) 2026-07-17 22:38:57 +08:00
crons.js feat(web): 定时任务执行历史列表(右栏 Tab + 分页)(bump 0.29.0) 2026-06-26 12:53:56 +08:00
dom.js feat(web): 移动端显示修复 + 对外品牌名 ZCBOT_BRAND_NAME(bump 0.45.0) 2026-07-07 10:44:26 +08:00
embed.js feat(wecom): 企业微信应用主页免登进 embed 控制台(bump 0.44.0) 2026-07-07 10:09:52 +08:00
files.js feat(web): dev SPA 加 9 处克制入场微动效(纯 CSS + 一处极小 JS) 2026-06-10 16:15:21 +08:00
format.js feat(context): §8.8 Phase 2 长会话中段折叠摘要 + 头部压缩指示环(bump 0.54.1) 2026-07-09 12:39:31 +08:00
layout.js refactor(dev): 前端模块化 Step 2(起)— 抽出 layout.js 2026-06-06 21:27:51 +08:00
main.js feat(procs): 后台进程 bg proc + 对话锁/完成通知 + seedance 续查(bump 0.56.0) 2026-07-10 16:47:11 +08:00
markdown.js refactor(dev): 前端模块化 Step 1 — dev.html 拆零构建 ES module(叶子优先) 2026-06-05 16:55:20 +08:00
media.js fix(rendering+chip): 修 task d9c74a5a 三处独立缺陷——chip 粗体路径 404 / docx emoji 缺字 / 单文件被迫建 sections(bump 0.58.37) 2026-07-17 22:15:34 +08:00
memory.js feat(memory): 双层记忆升级为 agent 自管 + 前端只读记忆面板 + bump 0.12.0 2026-06-13 12:20:08 +08:00
newtask.js fix(web): 修登录无反应(newtask.js 漏 import $)+ 补 favicon 2026-06-08 09:22:59 +08:00
preview.js fix(web): SVG 预览强制 image/svg+xml(前端 blob mime + 后端 download)(bump 0.33.1) 2026-06-30 08:28:11 +08:00
procs.js feat(procs): 后台进程 bg proc + 对话锁/完成通知 + seedance 续查(bump 0.56.0) 2026-07-10 16:47:11 +08:00
progress.js fix(web): 进度条自愈——回放层强制单调完成(d1285247 复盘,bump 0.36.2) 2026-07-03 11:16:34 +08:00
skills.js feat(web): 技能弹框平台/我的拆成独立两栏(三栏 master-detail) 2026-06-11 10:22:06 +08:00
state.js feat(web): 有 gpt_image 权限的用户生图默认 GPT 生图(bump 0.58.16) 2026-07-13 10:26:31 +08:00
wechat.js fix(web): 修复卡片⚙点击无反应(export openWechatModal)+ 卡片圆角调小 2026-06-26 12:26:44 +08:00