271 Commits
Author SHA1 Message Date
kuekhaoyang 3771b63332 feat: add self-contained strict verification chain
Keep every post-59948b5 change inside verification/. The verifier owns its npm working directory and sanitized Docker context, so no release metadata or root Docker configuration is modified.
2026-08-02 06:11:13 +08:00
Kuek Hao YangandGitHub 59948b5085 Merge pull request #231 from KuekHaoYang/agent/release-4.9.19
fix: ship self-hosted sync and image fallback (v4.9.19)
2026-07-31 23:19:17 +08:00
kuekhaoyang f1a0086701 fix: harden sync and image fallback; release 4.9.19 2026-07-31 23:17:50 +08:00
kuekhaoyang 4983a9e2ab Merge remote-tracking branch 'origin/pr-230' into agent/release-4.9.19 2026-07-31 23:08:41 +08:00
kuekhaoyang 3db31b4d80 Merge remote-tracking branch 'origin/pr-229' into agent/release-4.9.19 2026-07-31 23:08:41 +08:00
kuekhaoyang c64458bd6d Merge remote-tracking branch 'origin/pr-227' into agent/release-4.9.19 2026-07-31 23:08:41 +08:00
can4hou6joeng4 3bf72e4b66 fix(douban): 图片代理按镜像回退,修复境外部署海报大量 500
imgN.doubanio.com 互为镜像但解析到不同线路:img1 当前解析到国内 IP
180.97.198.41,在境外主机上不可达。此时 fetch 是直接抛异常而不是返回
状态码,于是走进 catch 一律返回 500,首页会有相当比例的海报加载失败。

改为在 imgN.doubanio.com 之间按 img9 -> img3 -> img2 顺序回退,同一
路径换个镜像即可取到。同时保留最后一次的真实状态码,不再把上游的 403
或 404 也统一伪装成 500。
2026-07-31 18:32:34 +08:00
can4hou6joeng4 b63f94fed4 fix(sync): 丢弃缺少 videoId 的同步记录,避免整页崩溃
服务端同步恢复回来的记录不保证结构完整(旧结构或半截写入)。缺少 videoId
的记录会让 HistoryItem.tsx:24 与 FavoritesItem.tsx:21 在渲染期拼播放地址
时对 undefined 调用 toString(),抛出未捕获异常。由于 getVideoUrl() 是在
渲染 href 时调用的,React 会直接卸载整棵树,首页白屏且刷新无效——该账号
只能靠直接改库才能恢复。

新增 lib/utils/sync-records.ts 做可渲染性判定(要求 videoId、source、
title 齐备),在云端拉取入口 useCloudSync 与 HistoryList / FavoritesList
各过滤一次:脏数据进不来,已经落库的也渲染不出来。
2026-07-31 18:28:35 +08:00
can4hou6joeng4 81c46d754e fix(sync): 修复自托管下无法读取 Upstash 配置
app/api/user/{sync,config} 用 @upstash/redis/cloudflare 的
Redis.fromEnv() 创建客户端。该实现只读传入的 env 参数或 Cloudflare
全局绑定,从不回退到 process.env,因此在 Docker / Node 自托管下
url 与 token 恒为 undefined,两个接口必定返回 500,跨设备同步
(收藏、历史、设置)完全不可用。认证走的是 auth.ts 里的
new Redis({ url, token }),所以登录正常,只有用户数据读写失败。

把 auth.ts 中已有的双源回退抽成 lib/server/runtime-env.ts,Redis
客户端抽成 lib/server/redis.ts,两个路由改为惰性获取共享客户端。
惰性创建同时修正了另一个隐患:Cloudflare 的 per-request 绑定在
模块求值阶段不可达,而原先客户端是在模块作用域创建的。

未配置 Upstash 时返回 503 并给出明确说明,而不是当成请求失败。

Fixes #226
2026-07-31 10:12:40 +08:00
Kuek Hao YangandGitHub 0675c28413 Merge pull request #225 from KuekHaoYang/agent/fix-issue-224-mobile-fullscreen
Fix mobile player controls so the system fullscreen action remains visible on narrow screens.
2026-07-29 22:40:33 +08:00
kuekhaoyang 0294f59602 fix: keep mobile fullscreen controls visible 2026-07-29 22:36:05 +08:00
Kuek Hao YangandGitHub 46f6eee2a6 Merge pull request #222 from Troray/feature/ad-filter-upgrade
Harden M3U8 ad filtering and prevent false positives
2026-07-29 22:15:20 +08:00
kuekhaoyang cdab3b1c8a fix: harden M3U8 ad filtering
Reject unsafe dynamic filter execution, reduce heuristic false positives, add regression coverage, bump the app to 4.9.17, and update Next.js to the latest stable security patch.
2026-07-29 22:13:54 +08:00
Troray c53801d3bf feat(ad-filter): upgrade M3U8 ad filtering algorithm with dynamic script sandbox, zero false-positive framerate protections, and Edge API 2026-07-29 13:38:31 +08:00
Kuek Hao YangandGitHub 6151edab4d Merge pull request #221 from KuekHaoYang/agent/fix-issue-220-floating-button-resize
fix: keep floating buttons anchored on resize
2026-07-27 21:19:51 +08:00
kuekhaoyang 907f393e2f fix: keep floating buttons anchored on resize 2026-07-27 21:13:08 +08:00
kuekhaoyang 1179148031 fix: avoid false-positive WebView transpile guard failures
Keep chrome69 downleveling for Android 9 WebViews, but only hard-fail on
logical assignment after transpile. Regex/polyfill feature detects and
minified ternaries can contain `??`/`?.` character sequences that are not
optional chaining or nullish coalescing operators.
2026-07-25 14:48:28 +08:00
kuekhaoyang e04b306334 Merge branch 'goal/issues-217-218-pr-219'
Ship 4.9.15: #217 Android TV 9 white screen, #218 player UX, PR #219 ad fingerprinting (safely integrated).
2026-07-25 14:43:42 +08:00
kuekhaoyang f98de077f7 fix: player UX, ad fingerprinting, Android TV 9 white screen
Address issues #217 #218 and integrate the useful parts of PR #219 without
regressions: stop player rebuild on episode reverse, grid/paged episodes,
poster placeholders, chrome69 client transpile for Amlogic WebView, and
duration-signature ad block detection while keeping interstitial/proxy filters.

Bump to 4.9.15.
2026-07-25 14:43:30 +08:00
Kuek Hao YangandGitHub c846c60d0c Merge pull request #216 from ustdbus/codex/upstream-cloudflare-auth
fix: support managed Upstash auth on Cloudflare Pages
2026-07-21 20:53:36 +08:00
kuekhaoyang 2ad9203e39 chore: preserve lockfile platform metadata 2026-07-21 20:51:05 +08:00
kuekhaoyang a1a3821538 fix: complete managed admin persistence 2026-07-21 20:50:34 +08:00
Codex 387da736e1 fix: cap PBKDF2 iterations for Cloudflare Workers 2026-07-20 16:13:52 +08:00
Codex dd4b7c9f24 fix: authenticate environment admin before Redis hashing 2026-07-20 16:13:52 +08:00
Codex b7e962b031 fix: read Cloudflare request environment 2026-07-20 16:13:51 +08:00
Codex 2a59e31cd4 fix: read admin password at runtime on Cloudflare 2026-07-20 16:13:51 +08:00
Codex 68d4fd944d fix: sync managed admin password from environment 2026-07-20 16:13:51 +08:00
Codex 27d30139c1 fix: support Upstash Redis on Cloudflare Pages 2026-07-20 16:13:51 +08:00
Kuek Hao YangandGitHub 8d558c79cf Merge pull request #211 from KuekHaoYang/agent/fix-issue-210-search-latency
修复慢源搜索提前结束与延迟虚高
2026-07-13 21:15:17 +08:00
kuekhaoyang 66d8564dd2 fix issue 210 slow source search reliability 2026-07-13 21:09:47 +08:00
kuekhaoyang 2ae0a03366 ci build Docker architectures natively 2026-07-12 01:38:19 +08:00
kuekhaoyang 0f82ec5660 fix Docker version output step 2026-07-12 01:11:28 +08:00
kuekhaoyang e135c6b084 ci publish versioned Docker images 2026-07-12 01:10:17 +08:00
kuekhaoyang 7474979308 merge issue 207 account actions fix 2026-07-12 01:03:03 +08:00
kuekhaoyang 7ae08e2d7d fix issue 207 account actions visibility 2026-07-12 01:02:47 +08:00
kuekhaoyang d6f2a2e3c7 fix login gate session loop 2026-07-09 17:39:46 +08:00
kuekhaoyang db72a74817 Remove unused quick search component 2026-07-09 17:19:00 +08:00
kuekhaoyang 8c522119c0 Remove homepage quick search groups 2026-07-09 17:13:13 +08:00
kuekhaoyang 2bb70ca648 Fix tag management view entering search flow 2026-07-09 16:59:39 +08:00
kuekhaoyang 5a76958816 merge issue 204 auth sync fix 2026-07-09 16:34:16 +08:00
kuekhaoyang 610f57c5b0 fix auth sync requests after login 2026-07-09 16:33:44 +08:00
kuekhaoyang d325603123 fix: support WebView 83 client assets 2026-07-09 16:07:57 +08:00
kuekhaoyang bacd3f887e Fix mobile danmaku canvas scaling 2026-07-09 15:48:38 +08:00
kuekhaoyang 93e6699937 fix: disable Vercel analytics outside Vercel 2026-07-09 15:07:34 +08:00
kuekhaoyang 89d1d7268b chore: ignore Wrangler local state in Docker context 2026-07-08 23:39:47 +08:00
kuekhaoyang 47b691a097 chore: exclude generated TypeScript files from Docker context 2026-07-08 23:38:04 +08:00
kuekhaoyang 8ebc2ae009 chore: ignore Cloudflare build output in Docker context 2026-07-08 23:32:42 +08:00
kuekhaoyang 787680468b feat: clarify proxy and add LAN access toggle 2026-07-08 23:28:25 +08:00
kuekhaoyang 0f39d65b75 fix: default homepage to popular tab
Ensure the homepage always opens on the 热门 tag instead of automatically selecting 为你推荐, even when viewing history exists or cached tags omit the popular tag.

Fixes #182

Fixes #190
2026-07-08 23:00:09 +08:00
kuekhaoyang 62dafbfe59 feat: add homepage category shortcuts 2026-07-08 22:34:29 +08:00