File size: 1,436 Bytes
4f2665c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
/**
 * Shared quota conversion utility.
 * Converts CodexUsageResponse (raw backend) → CodexQuota (normalized).
 */

import type { CodexQuota } from "./types.js";
import type { CodexUsageResponse } from "../proxy/codex-api.js";

export function toQuota(usage: CodexUsageResponse): CodexQuota {
  const sw = usage.rate_limit.secondary_window;
  return {
    plan_type: usage.plan_type,
    rate_limit: {
      allowed: usage.rate_limit.allowed,
      limit_reached: usage.rate_limit.limit_reached,
      used_percent: usage.rate_limit.primary_window?.used_percent ?? null,
      reset_at: usage.rate_limit.primary_window?.reset_at ?? null,
      limit_window_seconds: usage.rate_limit.primary_window?.limit_window_seconds ?? null,
    },
    secondary_rate_limit: sw
      ? {
          limit_reached: usage.rate_limit.limit_reached,
          used_percent: sw.used_percent ?? null,
          reset_at: sw.reset_at ?? null,
          limit_window_seconds: sw.limit_window_seconds ?? null,
        }
      : null,
    code_review_rate_limit: usage.code_review_rate_limit
      ? {
          allowed: usage.code_review_rate_limit.allowed,
          limit_reached: usage.code_review_rate_limit.limit_reached,
          used_percent:
            usage.code_review_rate_limit.primary_window?.used_percent ?? null,
          reset_at:
            usage.code_review_rate_limit.primary_window?.reset_at ?? null,
        }
      : null,
  };
}