# 巡樓 Threads Session 同步（Chrome 擴充）

從你已登入的 Chrome Threads 帳號，一鍵把 session 傳到巡樓 Go 後端（`:8890`）。

## 安裝

**方式 A（推薦）**：巡樓「設定」頁 → **下載擴充套件（ZIP）** → 解壓後載入。

**方式 B**：直接選擇 repo 資料夾 `extension/haixun-threads-sync`。

1. Chrome 打開 `chrome://extensions`
2. 開啟「開發人員模式」
3. 點「載入未封裝項目」
4. 選擇解壓後的 `haixun-threads-sync` 資料夾

## 必要條件

- 後端 API 在跑：`make run`（預設 `http://127.0.0.1:8890`）
- 前端在跑：`make web-dev`（預設 `http://localhost:5173`）
- 已在 Chrome 登入 `threads.com` 或 `threads.net`
- 已在巡樓網頁登入（JWT 存在 localStorage）

## 使用方式 A：連線設定頁（推薦）

1. 開啟 `http://localhost:5173` 並登入
2. 頂部切換目標經營帳號
3. 到「帳號 → 連線設定」
4. 切換到 **開發模式（爬蟲）**
5. 確認顯示「擴充已偵測」
6. 按 **「從 Chrome 同步到目前帳號」**

> 關閉開發模式 = 全部走 Threads API，不需要同步 Chrome session。

## 使用方式 B：擴充圖示

1. 先開著巡樓分頁並登入
2. 點擴充圖示 →「同步到巡樓」
3. 擴充會自動讀取巡樓分頁的 JWT 與目前帳號

## 設定 server 網址

擴充選項填入**前端網址**（不是 8890），例如：

- 本機：`http://localhost:5173` 或 `http://127.0.0.1:5173`
- 遠端：`https://haixun.example.com`

儲存後會自動注入網頁橋接腳本。API 在本機 dev 時會自動改打 `:8890`。

## 常見問題

| 現象 | 原因與處理 |
|------|------------|
| 尚未偵測擴充 | 擴充安裝/更新後頁面不會自動注入腳本 → `chrome://extensions` 重新載入擴充，再 **F5 刷新巡樓頁** |
| 等待擴充逾時 | 巡樓網址與擴充選項不一致（`localhost` vs `127.0.0.1`）→ 統一用同一個，或在擴充選項重新儲存 |
| 找不到登入狀態 / JWT | 開錯網站：要用 **新版** `http://localhost:5173`（Go 後台），不是舊版 Next `:3000` |
| 無法連線後端 :8890 | 只開了 `make web-dev` 沒開 API → 另開終端執行 `cd haixun-backend && make run` |
| invalid access token | JWT 過期（15 分鐘）→ 在巡樓頁重新整理或重新登入後再同步 |
| 找不到 cookies | 先在 Chrome 開 threads.com / threads.net 完成登入，再同步 |
| 缺少帳號 ID | 在巡樓頂部切換經營帳號，或打開 `/threads/:id/connections` |
| 開發模式未開啟 | 連線頁底部「開發工具」要先 **開啟開發模式**，同步按鈕才會出現 |

## 技術說明

- 網頁透過 `postMessage` 與 `content-haixun.js` 溝通
- 擴充 background 收集 Threads/Instagram cookies，組成 Playwright `storageState`
- 呼叫 `POST /api/v1/threads-accounts/:id/session/import`（Bearer JWT）