Hacktoberfest 2026:維護者為十月標記出來的 issue,仍然開放、適合新手。 瀏覽 Hacktoberfest issue

validateSettings() doesn't validate rateLimits[].period — zero period silently degrades to a 1ms backoff hint

已關閉 適合新手
#811 1 則留言 0 個 reaction 已指派 0 人 在 GitHub 檢視

維護者通常 1 天內回覆

還沒有人認領這個 Issue。

評估

難度
2/5
預估耗時
1-3 小時
新手友好度
82/100
Issue 類型
缺陷
描述清晰度
描述清楚
活躍度
活躍
技術堆疊
typescript
領域
backend

研究方向

從 src/utils/settings-config.ts 開始,那裡的 validateSettings() 已經檢查 pow.periodMs > 0,然後閱讀 src/@types/settings.ts 中的 RateLimit 類型。在該檢查旁邊,對每個 limits.*.rateLimits 陣列(以及 limits.admin.loginRateLimits)新增一個迴圈,當 period 不大於 0 時,推入一個 { path, message } 問題。完成的標準是:週期為零或負數時,啟動驗證失敗,且問題中指明了路徑;現有的設定測試仍然全部通過。

由索引模型根據 Issue 內容生成。

描述

Problem

validateSettings() (src/utils/settings-config.ts) enforces pow.periodMs > 0, but nothing validates period on any rateLimits[] entry. The RateLimit type (src/@types/settings.ts) declares period: number as required, so period: 0 passes type checks and startup validation without a word.

Since #807, a rejected request carries a retry-after hint computed as Math.max(1, Math.ceil(period)) ms. With period: 0 that emits a protocol-valid 1ms backoff — the misconfiguration is silently masked instead of failing loudly at startup. (It also degenerates the EWMA decay itself: λ = ln(2)/0, so prior activity decays to zero instantly and every event is judged in isolation.)

Affected arrays

All of these accept a RateLimit[] whose period is never validated:

  • limits.event.rateLimits
  • limits.message.rateLimits
  • limits.connection.rateLimits
  • limits.invoice.rateLimits
  • limits.admissionCheck.rateLimits
  • limits.invite.rateLimits
  • limits.admin.rateLimits and limits.admin.loginRateLimits

Suggested fix

In validateSettings(), next to the existing pow.periodMs check, iterate each rate-limit array and push a { path: 'limits.….rateLimits[i].period', message: 'period must be greater than 0' } issue when !(period > 0) — same style as the existing checks.


From Muse

主要語言
TypeScript
星號
829
分支
234
平均合併
2 天 10 小時
30 天內合併 PR
24

環境準備

從這裡開始

  1. 先讀完整個 Issue,再讀專案的貢獻指南。
  2. 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
  3. Fork 儲存庫,在一個分支上完成修改。
  4. 送出 Pull Request,並在描述裡引用這個 Issue 編號。

cameri/nostream 的其他 Issue

查看 cameri/nostream 的全部 Issue

相似的 Issue

更多 TypeScript Issue

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。