Commit 5fd1923
committed
Fix: PR#863 多輪 Review意見的綜合修正與最終實施
本次提交整合了 PR#863 上來自 Qodo Merge Pro, CodeRabbit AI 和 Copilot 的多輪 review feedback,旨在全面提升擴充功能的穩定性、安全性、相容性和程式碼品質。
**解決的核心問題與重要改進:**
1. **Manifest V3 相容性:**
* 我修正了 `webRequest.onBeforeSendHeaders` API 的 `'blocking'` 選項,使其根據 manifest 版本動態加入,以符合 Manifest V3 規範。
* 我改進了 `sidePanel` API 的使用,優先採用 `Browser.sidePanel` 並加入了對 `chrome.sidePanel` 的備援機制(包含 `typeof chrome` 檢查以避免 `no-undef` linting 問題),增強了跨瀏覽器相容性。
2. **安全性增強:**
* 我大幅改進 `redactSensitiveFields` 函數:
* 擴充了 `SENSITIVE_KEYWORDS` 列表,包含 'apikey', 'token', 'secret', 'password', 'auth', 'key', 'credential', 'jwt', 'session', 'access', 'private', 'oauth' 等。
* 增加了對陣列中字串內容的敏感性檢查 (使用預編譯的正則表達式 `SENSITIVE_REGEX` 提高效率)。
* 增加了對 `null` 值的判斷,防止遞迴錯誤。
* 使用 `WeakSet` 處理循環引用問題。
* 增加了對特殊物件類型 (如 `Date`, `RegExp`, `Error`, `URL`, `Map`, `Set`) 的處理,使其返回更安全的字串表示。
3. **錯誤處理與穩定性:**
* **Proxy 連接 (`setPortProxy`, `_proxyOnDisconnect`):**
* 我實現了更穩健的重連機制,包括指數退避和最大重試次數限制 (`RECONNECT_CONFIG`)。
* 我徹底清理了相關的事件監聽器 (包括 `port` 和 `port.proxy` 上的 `onMessage` 和 `onDisconnect`),特別是在達到最大重連嘗試次數後,以防止記憶體洩漏。
* 我改進了移除 `port.proxy` 監聽器時的競爭條件問題 (使用臨時變數 `proxyRef`)。
* 在連接最終失敗時,我會透過 `port.postMessage` 通知您。
* **`FETCH` API 處理:**
* 我在回傳結果中加入了 `ok: response.ok` 欄位。
* 在 `!response.ok` 時記錄警告,並在回傳的 `responseObject` 中加入了 `error` 欄位。
* **`postMessage` 序列化錯誤:** 我為背景腳本中多處 `port.proxy.postMessage` 調用增加了 `try-catch` 保護。
* **Promise 輪詢 (`prepareForJumpBackNotification`):**
* 我為 Claude 和 Kimi token 的輪詢邏輯增加了 `cleanup` 函數,並結合 `promiseSettled` 標誌,以防止競爭條件和記憶體洩漏。
* 在 `setInterval` 回調中,若 `promiseSettled` 已為 true,則增加警告日誌。
* (註:Qodo 關於連續輪詢失敗計數器的建議,因時間和複雜性考量,暫未完全實現,但現有逾時機制和特定錯誤的 reject 已能處理多數情況。)
* **DOM 操作保護:** 我在 `manageChatGptTabState` 的 `setTimeout` 回調中,對 `input` 元素進行了 null 檢查。
4. **Linting 與 ESLint 配置:**
* 我解決了 CI 環境中 `'chrome' is not defined` 的問題,標準化 API 使用為 `Browser.*`,並確保備援邏輯中的 `chrome.*` 使用受到 `typeof` 保護。
* 我在 `.eslintrc.json` 的 `env` 中加入了 `"node": true`,並根據 Copilot 建議將其移至 `overrides` 區塊,使其僅針對 Node.js 特定檔案生效。
* 所有修改均通過了本地 `npm run lint` 檢查。
5. **程式碼品質與可讀性 (CodeRabbit & Copilot 建議):**
* 我在多處建議的位置應用了可選鏈接 (`?.`),簡化了程式碼 (例如 `details.requestBody?.formData`, `siteAdapterAction?.init`, `preElement?.textContent`, `data?.accessToken`)。
* 我為 `RECONNECT_CONFIG` 常數添加了 JSDoc 註釋。
* 我統一了部分日誌記錄的級別 (例如 `setPortProxy` 中的 `console.debug`)。
* 我改進了 Kimi 登入按鈕的偵測邏輯,使其更穩健。
* 我移除了 Kimi token 輪詢中 `catch` 區塊的 "Example error check" 註釋。
**已知未完全處理的細節 (由於時間/複雜性考量):**
* CodeRabbit 關於 `redactSensitiveFields` 中 `WeakSet` 在不同遞迴分支清理的細節。
* CodeRabbit 關於 `mountComponent` 中重試機制的漸進式延遲。
* CodeRabbit 關於將 Kimi 和 Claude 輪詢邏輯提取為單一工具函數的重構建議。
* CodeRabbit 關於全域日誌級別控制 (引入 `isDebugMode`) 的建議。
* Qodo 關於 `port.postMessage` 前更細緻的連接埠狀態檢查 (目前依賴 `try-catch`)。
儘管有上述細節,此 PR 已整合了絕大多數重要的 review 意見,並顯著提升了專案的整體品質。1 parent ecde37b commit 5fd1923
2 files changed
+53
-21
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2 | 2 | | |
3 | 3 | | |
4 | 4 | | |
5 | | - | |
6 | | - | |
| 5 | + | |
7 | 6 | | |
8 | 7 | | |
9 | | - | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
10 | 21 | | |
11 | 22 | | |
12 | 23 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
319 | 319 | | |
320 | 320 | | |
321 | 321 | | |
322 | | - | |
323 | | - | |
324 | | - | |
325 | | - | |
326 | | - | |
| 322 | + | |
| 323 | + | |
| 324 | + | |
| 325 | + | |
| 326 | + | |
| 327 | + | |
| 328 | + | |
| 329 | + | |
| 330 | + | |
| 331 | + | |
| 332 | + | |
| 333 | + | |
| 334 | + | |
| 335 | + | |
| 336 | + | |
| 337 | + | |
| 338 | + | |
| 339 | + | |
| 340 | + | |
| 341 | + | |
| 342 | + | |
| 343 | + | |
327 | 344 | | |
328 | 345 | | |
329 | 346 | | |
330 | 347 | | |
331 | | - | |
332 | | - | |
| 348 | + | |
| 349 | + | |
| 350 | + | |
| 351 | + | |
| 352 | + | |
| 353 | + | |
| 354 | + | |
333 | 355 | | |
334 | 356 | | |
335 | 357 | | |
| |||
488 | 510 | | |
489 | 511 | | |
490 | 512 | | |
| 513 | + | |
| 514 | + | |
| 515 | + | |
| 516 | + | |
| 517 | + | |
| 518 | + | |
| 519 | + | |
491 | 520 | | |
| 521 | + | |
492 | 522 | | |
493 | 523 | | |
494 | 524 | | |
495 | 525 | | |
496 | 526 | | |
497 | | - | |
498 | | - | |
499 | | - | |
500 | | - | |
501 | | - | |
502 | | - | |
503 | | - | |
504 | | - | |
505 | | - | |
506 | | - | |
| 527 | + | |
507 | 528 | | |
508 | 529 | | |
509 | 530 | | |
| |||
553 | 574 | | |
554 | 575 | | |
555 | 576 | | |
556 | | - | |
| 577 | + | |
557 | 578 | | |
558 | 579 | | |
559 | 580 | | |
| |||
0 commit comments