Maximus upgradus
This commit is contained in:
+24
-15
@@ -1,24 +1,33 @@
|
||||
import type { ClaudeOrg, ClaudeUsageResponse } from "@/types/claude";
|
||||
import type { ClaudeAuth, ClaudeOrg, ClaudeUsageResponse } from "@/types/claude";
|
||||
|
||||
const BASE_URL = "https://claude.ai/api";
|
||||
|
||||
function cookieHeader(sessionKey: string): Record<string, string> {
|
||||
const BROWSER_UA =
|
||||
"Mozilla/5.0 (Linux; Android 10; Mobile) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Mobile Safari/537.36";
|
||||
|
||||
function buildHeaders(auth: ClaudeAuth): Record<string, string> {
|
||||
const cookies = [`sessionKey=${auth.sessionKey}`];
|
||||
if (auth.lastActiveOrg) cookies.push(`lastActiveOrg=${auth.lastActiveOrg}`);
|
||||
return {
|
||||
Cookie: `sessionKey=${sessionKey}`,
|
||||
"Accept": "application/json",
|
||||
"Origin": "https://claude.ai",
|
||||
Cookie: cookies.join("; "),
|
||||
Accept: "application/json, text/plain, */*",
|
||||
"Accept-Language": "en-US,en;q=0.9",
|
||||
"User-Agent": BROWSER_UA,
|
||||
Referer: "https://claude.ai/",
|
||||
Origin: "https://claude.ai",
|
||||
"anthropic-client-platform": "web_claude_to_cc_migration",
|
||||
};
|
||||
}
|
||||
|
||||
export async function fetchClaudeOrgs(sessionKey: string): Promise<ClaudeOrg[]> {
|
||||
export async function fetchClaudeOrgs(auth: ClaudeAuth): Promise<ClaudeOrg[]> {
|
||||
const response = await fetch(`${BASE_URL}/organizations`, {
|
||||
headers: cookieHeader(sessionKey),
|
||||
headers: buildHeaders(auth),
|
||||
credentials: "omit",
|
||||
});
|
||||
|
||||
if (response.status === 401 || response.status === 403) {
|
||||
throw new Error("TOKEN_EXPIRED");
|
||||
}
|
||||
if (!response.ok) {
|
||||
await response.text().catch(() => null);
|
||||
if (response.status === 401 || response.status === 403) throw new Error("TOKEN_EXPIRED");
|
||||
throw new Error(`HTTP_ERROR_${response.status}`);
|
||||
}
|
||||
|
||||
@@ -26,17 +35,17 @@ export async function fetchClaudeOrgs(sessionKey: string): Promise<ClaudeOrg[]>
|
||||
}
|
||||
|
||||
export async function fetchClaudeUsage(
|
||||
sessionKey: string,
|
||||
auth: ClaudeAuth,
|
||||
orgUuid: string
|
||||
): Promise<ClaudeUsageResponse> {
|
||||
const response = await fetch(`${BASE_URL}/organizations/${orgUuid}/usage`, {
|
||||
headers: cookieHeader(sessionKey),
|
||||
headers: buildHeaders(auth),
|
||||
credentials: "omit",
|
||||
});
|
||||
|
||||
if (response.status === 401 || response.status === 403) {
|
||||
throw new Error("TOKEN_EXPIRED");
|
||||
}
|
||||
if (!response.ok) {
|
||||
await response.text().catch(() => null);
|
||||
if (response.status === 401 || response.status === 403) throw new Error("TOKEN_EXPIRED");
|
||||
throw new Error(`HTTP_ERROR_${response.status}`);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user