Skip to content

Latest commit

 

History

History

development

README.md

WebVideo2NAS 開發者教學

這份是給想動 WebVideo2NAS 程式碼的人看的內部文件。如果你只是要把 chrome extension 載到 Chrome、把 worker 跑到 NAS 上用,請看根目錄 README。這裡是寫程式 / 修 bug / 改架構用的。

想要 API 契約、DB schema、整體架構的 canonical 使用者參考(非實作細節),看 docs/ 文件索引 → ARCHITECTURE.md / SPECIFICATION.md / PRIVACY_SECURITY.md。本 development/ 各章講的是「怎麼實作 / 為什麼這樣寫」,同一主題以 docs/ 那份為準,不要在兩邊各寫一份會 drift 的規格。

怎麼安排這份教學

# 章節 你會學到 預估時間
01 入門 + local dev setup 環境裝好、chrome ext 載進 Chrome、docker compose 起來、第一筆 e2e 下載 30 min
02 整體架構 6 個元件怎麼接、訊息怎麼流、狀態歸誰管、可信邊界、失敗模式 30 min
03 Chrome extension 細節 MV3 4 個 JS context 分工、訊息路由、跨 tab 隔離 invariants(v2.3.4 修法的核心)、AV-task pipeline 45 min
04 Worker pipeline 內部 main loop、process_job 三條分流(m3u8 / mpd / mp4)、AES 解密 + byte-concat merge、suspect heuristic、cancellation、backfill 工具 1 hr
05 API + DB schema 7 個 endpoint、auth + rate limit、3 張 table 欄位語意、SSRF guard、攻擊面總結 30 min
06 測試完整指南 vitest(chrome ext,含 vm-sandbox 載 SW script 技巧) + pytest(api + worker,含 AST 抽函式 dev 技巧)、CI 三個 job、目前 coverage gap 跟可信度排序 45 min
07 CI + release 4 個 GitHub Actions workflow、tag 怎麼觸發 release、versioning 慣例、env vars 全表、rollback 怎麼做 30 min
08 Bug case studies 產品上踩到過、值得寫成 post-mortem 的 bug。每筆解到完整 root cause + 為什麼測試沒抓到 + 補 cover 的選項 30 min/case

路徑慣例

文件裡看到的相對路徑都是相對於 repo 根,例如:

  • chrome-extension/background.js — extension 的 service worker(webRequest 攔截 + sidepanel 訊息處理 + AV-task pipeline)
  • chrome-extension/sidepanel.js — 側欄 UI 邏輯
  • video-downloader/docker/worker/worker.py — worker 主進程
  • video-downloader/docker/worker/downloader.py — segment 平行下載 + AES 解密
  • video-downloader/docker/worker/m3u8_parser.py — m3u8 → segments + key info
  • video-downloader/docker/worker/ffmpeg_wrapper.py — segment → mp4 merge
  • video-downloader/docker/api/main.py — FastAPI 入口
  • video-downloader/docker/docker-compose.synology.yml — production 部署的 compose

如果只想看一件事

你需要先有的

  • Docker Desktop (Win/Mac) 或 Docker Engine + compose plugin (Linux/NAS)
  • Chrome 或 Chromium-based browser — extension 只支援 MV3
  • Node.js 18+ — 跑 chrome ext vitest 用,不寫測試不需要
  • uv (pip install uv 或 astral.sh) — 跑 worker / API pytest 用
  • Git

不需要 NAS 也能 dev — 整套 stack 在 local 用 docker-compose_not_synology.yml 跑,CI 也是這樣跑。

文件成長策略

每個章節獨立可讀——不需要從 ch 01 順著看到 ch 08。發現某章哪段不對 / 過時 / 缺東西,直接改——不需要等規劃。新發生 bug 的 post-mortem 就追加進 ch 08,新章節需要時就插一個進來。