mirror of
https://github.com/router-for-me/Cli-Proxy-API-Management-Center.git
synced 2026-06-16 21:03:58 +08:00
refactor(quota): add monthly limits for team plans in quota windows
This commit is contained in:
@@ -246,12 +246,18 @@ const fetchAntigravityQuota = async (
|
||||
throw createStatusError(lastError || t('common.unknown_error'), priorityStatus ?? lastStatus);
|
||||
};
|
||||
|
||||
const buildCodexQuotaWindows = (payload: CodexUsagePayload, t: TFunction): CodexQuotaWindow[] => {
|
||||
const buildCodexQuotaWindows = (
|
||||
payload: CodexUsagePayload,
|
||||
t: TFunction,
|
||||
planType?: string | null
|
||||
): CodexQuotaWindow[] => {
|
||||
const FIVE_HOUR_SECONDS = 18000;
|
||||
const WEEK_SECONDS = 604800;
|
||||
const isTeamPlan = normalizePlanType(planType) === 'team';
|
||||
const WINDOW_META = {
|
||||
codeFiveHour: { id: 'five-hour', labelKey: 'codex_quota.primary_window' },
|
||||
codeWeekly: { id: 'weekly', labelKey: 'codex_quota.secondary_window' },
|
||||
codeMonthly: { id: 'monthly', labelKey: 'codex_quota.team_secondary_window' },
|
||||
codeReviewFiveHour: {
|
||||
id: 'code-review-five-hour',
|
||||
labelKey: 'codex_quota.code_review_primary_window',
|
||||
@@ -260,6 +266,10 @@ const buildCodexQuotaWindows = (payload: CodexUsagePayload, t: TFunction): Codex
|
||||
id: 'code-review-weekly',
|
||||
labelKey: 'codex_quota.code_review_secondary_window',
|
||||
},
|
||||
codeReviewMonthly: {
|
||||
id: 'code-review-monthly',
|
||||
labelKey: 'codex_quota.code_review_team_secondary_window',
|
||||
},
|
||||
} as const;
|
||||
|
||||
const rateLimit = payload.rate_limit ?? payload.rateLimit ?? undefined;
|
||||
@@ -346,10 +356,11 @@ const buildCodexQuotaWindows = (payload: CodexUsagePayload, t: TFunction): Codex
|
||||
rawLimitReached,
|
||||
rawAllowed
|
||||
);
|
||||
const codeSecondaryWindowMeta = isTeamPlan ? WINDOW_META.codeMonthly : WINDOW_META.codeWeekly;
|
||||
addWindow(
|
||||
WINDOW_META.codeWeekly.id,
|
||||
t(WINDOW_META.codeWeekly.labelKey),
|
||||
WINDOW_META.codeWeekly.labelKey,
|
||||
codeSecondaryWindowMeta.id,
|
||||
t(codeSecondaryWindowMeta.labelKey),
|
||||
codeSecondaryWindowMeta.labelKey,
|
||||
undefined,
|
||||
rateWindows.weeklyWindow,
|
||||
rawLimitReached,
|
||||
@@ -368,10 +379,13 @@ const buildCodexQuotaWindows = (payload: CodexUsagePayload, t: TFunction): Codex
|
||||
codeReviewLimitReached,
|
||||
codeReviewAllowed
|
||||
);
|
||||
const codeReviewSecondaryWindowMeta = isTeamPlan
|
||||
? WINDOW_META.codeReviewMonthly
|
||||
: WINDOW_META.codeReviewWeekly;
|
||||
addWindow(
|
||||
WINDOW_META.codeReviewWeekly.id,
|
||||
t(WINDOW_META.codeReviewWeekly.labelKey),
|
||||
WINDOW_META.codeReviewWeekly.labelKey,
|
||||
codeReviewSecondaryWindowMeta.id,
|
||||
t(codeReviewSecondaryWindowMeta.labelKey),
|
||||
codeReviewSecondaryWindowMeta.labelKey,
|
||||
undefined,
|
||||
codeReviewWindows.weeklyWindow,
|
||||
codeReviewLimitReached,
|
||||
@@ -411,10 +425,14 @@ const buildCodexQuotaWindows = (payload: CodexUsagePayload, t: TFunction): Codex
|
||||
additionalLimitReached,
|
||||
additionalAllowed
|
||||
);
|
||||
const additionalSecondaryLabelKey = isTeamPlan
|
||||
? 'codex_quota.additional_team_secondary_window'
|
||||
: 'codex_quota.additional_secondary_window';
|
||||
const additionalSecondaryId = isTeamPlan ? 'monthly' : 'weekly';
|
||||
addWindow(
|
||||
`${idPrefix}-weekly-${index}`,
|
||||
t('codex_quota.additional_secondary_window', { name: limitName }),
|
||||
'codex_quota.additional_secondary_window',
|
||||
`${idPrefix}-${additionalSecondaryId}-${index}`,
|
||||
t(additionalSecondaryLabelKey, { name: limitName }),
|
||||
additionalSecondaryLabelKey,
|
||||
{ name: limitName },
|
||||
additionalSecondaryWindow,
|
||||
additionalLimitReached,
|
||||
@@ -473,9 +491,10 @@ const fetchCodexQuota = async (
|
||||
const rateLimitResetCreditsAvailableCount = normalizeNumberValue(
|
||||
resetCredits?.available_count ?? resetCredits?.availableCount
|
||||
);
|
||||
const windows = buildCodexQuotaWindows(payload, t);
|
||||
const planType = planTypeFromUsage ?? planTypeFromFile;
|
||||
const windows = buildCodexQuotaWindows(payload, t, planType);
|
||||
return {
|
||||
planType: planTypeFromUsage ?? planTypeFromFile,
|
||||
planType,
|
||||
subscriptionActiveUntil,
|
||||
rateLimitResetCreditsAvailableCount,
|
||||
windows,
|
||||
|
||||
@@ -433,10 +433,13 @@
|
||||
"fetch_all": "Fetch All",
|
||||
"primary_window": "5-hour limit",
|
||||
"secondary_window": "Weekly limit",
|
||||
"team_secondary_window": "Monthly limit",
|
||||
"code_review_primary_window": "Code review 5-hour limit",
|
||||
"code_review_secondary_window": "Code review weekly limit",
|
||||
"code_review_team_secondary_window": "Code review monthly limit",
|
||||
"additional_primary_window": "{{name}} 5-hour limit",
|
||||
"additional_secondary_window": "{{name}} weekly limit",
|
||||
"additional_team_secondary_window": "{{name}} monthly limit",
|
||||
"plan_label": "Plan",
|
||||
"expires_label": "Expires",
|
||||
"reset_credits_label": "Manual resets",
|
||||
|
||||
@@ -427,10 +427,13 @@
|
||||
"fetch_all": "Получить все",
|
||||
"primary_window": "Лимит на 5 часов",
|
||||
"secondary_window": "Недельный лимит",
|
||||
"team_secondary_window": "Месячный лимит",
|
||||
"code_review_primary_window": "Лимит code review на 5 часов",
|
||||
"code_review_secondary_window": "Недельный лимит code review",
|
||||
"code_review_team_secondary_window": "Месячный лимит code review",
|
||||
"additional_primary_window": "{{name}}: лимит на 5 часов",
|
||||
"additional_secondary_window": "{{name}}: недельный лимит",
|
||||
"additional_team_secondary_window": "{{name}}: месячный лимит",
|
||||
"plan_label": "Тариф",
|
||||
"expires_label": "Истекает",
|
||||
"plan_plus": "Plus",
|
||||
|
||||
@@ -433,10 +433,13 @@
|
||||
"fetch_all": "获取全部",
|
||||
"primary_window": "5 小时限额",
|
||||
"secondary_window": "周限额",
|
||||
"team_secondary_window": "月度限额",
|
||||
"code_review_primary_window": "代码审查 5 小时限额",
|
||||
"code_review_secondary_window": "代码审查周限额",
|
||||
"code_review_team_secondary_window": "代码审查月度限额",
|
||||
"additional_primary_window": "{{name}} 5 小时限额",
|
||||
"additional_secondary_window": "{{name}} 周限额",
|
||||
"additional_team_secondary_window": "{{name}} 月度限额",
|
||||
"plan_label": "套餐",
|
||||
"expires_label": "到期时间",
|
||||
"reset_credits_label": "主动重置次数",
|
||||
|
||||
@@ -433,10 +433,13 @@
|
||||
"fetch_all": "取得全部",
|
||||
"primary_window": "5 小時限額",
|
||||
"secondary_window": "週限額",
|
||||
"team_secondary_window": "月度限額",
|
||||
"code_review_primary_window": "程式碼審查 5 小時限額",
|
||||
"code_review_secondary_window": "程式碼審查週限額",
|
||||
"code_review_team_secondary_window": "程式碼審查月度限額",
|
||||
"additional_primary_window": "{{name}} 5 小時限額",
|
||||
"additional_secondary_window": "{{name}} 週限額",
|
||||
"additional_team_secondary_window": "{{name}} 月度限額",
|
||||
"plan_label": "方案",
|
||||
"expires_label": "到期時間",
|
||||
"reset_credits_label": "主動重置次數",
|
||||
|
||||
Reference in New Issue
Block a user