kinaiok
Initial deployment setup for Hugging Face Spaces
5ef6e9d
# Turnstile Solver — 自建 Cloudflare Turnstile 求解服務
使用 Playwright + Headless Chromium 自動求解 Cloudflare Turnstile,免第三方 API 費用。
## 部署到 Vercel
### 1. Fork / 上傳此目錄到 GitHub
`artifacts/turnstile-solver/` 的內容推送為一個 GitHub repo(或 monorepo 子目錄)。
### 2. 在 Vercel 建立新項目
1. Vercel Dashboard → **Add New Project**
2. 匯入你的 GitHub repo
3. **Framework Preset**: 選 `Other`
4. **Root Directory**: 如果是獨立 repo,留空;monorepo 則設為 `artifacts/turnstile-solver`
5. **Build Command**: 留空(Vercel 自動處理 TypeScript)
6. **Output Directory**: 留空
### 3. 設定環境變數(可選)
| 變數 | 說明 | 範例 |
|------|------|------|
| `SOLVER_SECRET` | 保護 API 的密鑰,設定後呼叫需帶 `X-Solver-Secret` header | `my-secret-key-123` |
| `CHROMIUM_PACK_URL` | 自定義 Chromium 下載 URL(預設使用 v133) | 留空即可 |
### 4. 部署後設定到星光工坊
部署完成後,將 Vercel 網址填入 Admin → Config → 「Playwright 求解器 URL」:
```
https://your-solver.vercel.app/api/solve
```
## API 說明
### `POST /api/solve`
返回一個有效的 Turnstile token。
**Request Headers(若設定了 SOLVER_SECRET):**
```
X-Solver-Secret: your-secret
```
**Query Params:**
- `?force=1` — 強制清除快取,重新求解
**Response:**
```json
{
"token": "0.xyz...",
"cached": false,
"solvedInMs": 4200
}
```
**Error:**
```json
{ "error": "Solver failed: ..." }
```
### `GET /api/health`
健康檢查端點。
## 本機測試
```bash
cd artifacts/turnstile-solver
npm install
npx playwright install chromium # 安裝本機 Chromium
npx vercel dev # 啟動本機 Vercel dev server
curl -X POST http://localhost:3000/api/solve
```
## 注意事項
- Vercel **Hobby 方案**函數大小上限 50MB,而 `@sparticuz/chromium-min` 在執行時動態下載 Chromium(不計入 bundle),應能通過
- 若遇到 Turnstile 無法求解(Cloudflare 偵測到機器人),建議:
1. 加入更多 Stealth 修補(見 `src/solver.ts`)
2. 換用付費服務(CapSolver)
- Token 快取 4.5 分鐘,不會每次請求都啟動瀏覽器