/ services / api / ultrareviewQuota.ts
ultrareviewQuota.ts
 1  import axios from 'axios'
 2  import { getOauthConfig } from '../../constants/oauth.js'
 3  import { isClaudeAISubscriber } from '../../utils/auth.js'
 4  import { logForDebugging } from '../../utils/debug.js'
 5  import { getOAuthHeaders, prepareApiRequest } from '../../utils/teleport/api.js'
 6  
 7  export type UltrareviewQuotaResponse = {
 8    reviews_used: number
 9    reviews_limit: number
10    reviews_remaining: number
11    is_overage: boolean
12  }
13  
14  /**
15   * Peek the ultrareview quota for display and nudge decisions. Consume
16   * happens server-side at session creation. Null when not a subscriber or
17   * the endpoint errors.
18   */
19  export async function fetchUltrareviewQuota(): Promise<UltrareviewQuotaResponse | null> {
20    if (!isClaudeAISubscriber()) return null
21    try {
22      const { accessToken, orgUUID } = await prepareApiRequest()
23      const response = await axios.get<UltrareviewQuotaResponse>(
24        `${getOauthConfig().BASE_API_URL}/v1/ultrareview/quota`,
25        {
26          headers: {
27            ...getOAuthHeaders(accessToken),
28            'x-organization-uuid': orgUUID,
29          },
30          timeout: 5000,
31        },
32      )
33      return response.data
34    } catch (error) {
35      logForDebugging(`fetchUltrareviewQuota failed: ${error}`)
36      return null
37    }
38  }