mirror of
https://github.com/Wei-Shaw/sub2api.git
synced 2026-10-20 00:18:55 +00:00
fix(opencode): report 403 as neutral forbidden in usage snapshot
This commit is contained in:
@@ -779,7 +779,7 @@ func (s *OpenCodeGoUsageService) refreshLoadedAccount(ctx context.Context, accou
|
||||
return s.persistFailure(ctx, account, intervalMinutes, now, resp.StatusCode, "unauthorized", retryAfter(resp.Header, now), true)
|
||||
}
|
||||
if resp.StatusCode == http.StatusForbidden {
|
||||
return s.persistFailure(ctx, account, intervalMinutes, now, resp.StatusCode, "OpenCode Go subscription required (403)", retryAfter(resp.Header, now), false)
|
||||
return s.persistFailure(ctx, account, intervalMinutes, now, resp.StatusCode, "forbidden", retryAfter(resp.Header, now), false)
|
||||
}
|
||||
if resp.StatusCode < 200 || resp.StatusCode >= 300 {
|
||||
return s.persistFailure(ctx, account, intervalMinutes, now, resp.StatusCode, "http_error", retryAfter(resp.Header, now), false)
|
||||
|
||||
@@ -320,7 +320,7 @@ func TestOpenCodeGoUsageRefresh401Unauthorized(t *testing.T) {
|
||||
require.True(t, openCodeGoUsageAutoRefreshEnabled(account))
|
||||
}
|
||||
|
||||
func TestOpenCodeGoUsageRefresh403SubscriptionRequired(t *testing.T) {
|
||||
func TestOpenCodeGoUsageRefresh403Forbidden(t *testing.T) {
|
||||
account := openCodeGoUsageAccount(7)
|
||||
repo := &openCodeGoUsageTestRepo{accounts: map[int64]*Account{7: account}}
|
||||
stub := &openCodeGoUsageHTTPStub{status: http.StatusForbidden}
|
||||
@@ -330,7 +330,7 @@ func TestOpenCodeGoUsageRefresh403SubscriptionRequired(t *testing.T) {
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, OpenCodeGoUsageStatusFailed, state.Snapshot.Status)
|
||||
require.Equal(t, http.StatusForbidden, state.Snapshot.HTTPStatus)
|
||||
require.Equal(t, "OpenCode Go subscription required (403)", state.Snapshot.LastError)
|
||||
require.Equal(t, "forbidden", state.Snapshot.LastError)
|
||||
require.Equal(t, 1, state.Snapshot.FailureCount)
|
||||
}
|
||||
|
||||
|
||||
@@ -203,7 +203,8 @@ export default {
|
||||
refreshSuccess: 'OpenCode Go usage refreshed',
|
||||
refreshFailed: 'Failed to refresh OpenCode Go usage',
|
||||
errors: {
|
||||
OPENCODE_GO_USAGE_REFRESH_RATE_LIMITED: 'Refresh is limited. Try again in {retry_after_seconds} seconds.'
|
||||
OPENCODE_GO_USAGE_REFRESH_RATE_LIMITED: 'Refresh is limited. Try again in {retry_after_seconds} seconds.',
|
||||
forbidden: 'Upstream returned 403: could be a missing/expired OpenCode Go subscription or a WAF/access-policy block; check the network path and HTTP status.'
|
||||
}
|
||||
},
|
||||
types: {
|
||||
|
||||
@@ -406,7 +406,8 @@ export default {
|
||||
refreshSuccess: 'OpenCode Go 用量已刷新',
|
||||
refreshFailed: '刷新 OpenCode Go 用量失败',
|
||||
errors: {
|
||||
OPENCODE_GO_USAGE_REFRESH_RATE_LIMITED: '刷新过于频繁,请在 {retry_after_seconds} 秒后重试。'
|
||||
OPENCODE_GO_USAGE_REFRESH_RATE_LIMITED: '刷新过于频繁,请在 {retry_after_seconds} 秒后重试。',
|
||||
forbidden: '上游返回 403:可能是订阅缺失/失效,也可能是 WAF 或访问策略拦截,请结合网络路径与 HTTP 状态排查。'
|
||||
}
|
||||
},
|
||||
types: {
|
||||
|
||||
Reference in New Issue
Block a user