@metyatech/ai-quota 1.2.0 → 1.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -6
- package/dist/claude.d.ts +2 -2
- package/dist/claude.d.ts.map +1 -1
- package/dist/claude.js +147 -28
- package/dist/claude.js.map +1 -1
- package/dist/copilot.d.ts +19 -5
- package/dist/copilot.d.ts.map +1 -1
- package/dist/copilot.js +292 -20
- package/dist/copilot.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -106,12 +106,15 @@ ai-quota --json
|
|
|
106
106
|
|
|
107
107
|
### Credential lookup
|
|
108
108
|
|
|
109
|
-
| Agent | Source
|
|
110
|
-
| ------- |
|
|
111
|
-
| Claude | `~/.claude/.credentials.json`
|
|
112
|
-
| Gemini | `~/.gemini/oauth_creds.json`
|
|
113
|
-
| Copilot | `
|
|
114
|
-
| Codex | `~/.codex/auth.json`
|
|
109
|
+
| Agent | Source |
|
|
110
|
+
| ------- | -------------------------------------------------------------------------------------------------------------------------- |
|
|
111
|
+
| Claude | `~/.claude/.credentials.json` |
|
|
112
|
+
| Gemini | `~/.gemini/oauth_creds.json` |
|
|
113
|
+
| Copilot | `COPILOT_GITHUB_TOKEN`, `GH_TOKEN`, `GITHUB_TOKEN`, Copilot CLI stored OAuth token, `gh auth token`, or legacy `hosts.yml` |
|
|
114
|
+
| Codex | `~/.codex/auth.json` |
|
|
115
|
+
|
|
116
|
+
Claude token behavior: `ai-quota` automatically refreshes Claude OAuth tokens using `refreshToken` when needed (including stale-token `401/403/429` retries).
|
|
117
|
+
Copilot token behavior: if you already authenticated with `copilot login`, `ai-quota` will reuse that stored OAuth token automatically, including Windows Credential Manager entries created by Copilot CLI.
|
|
115
118
|
|
|
116
119
|
Exit code is `0` on success. Exit code `1` if any agent fetch fails.
|
|
117
120
|
|
package/dist/claude.d.ts
CHANGED
|
@@ -5,10 +5,10 @@ export type { ClaudeUsageData, ClaudeUsageBucket } from "./types.js";
|
|
|
5
5
|
*
|
|
6
6
|
* This function attempts to read credentials from the Claude desktop application's
|
|
7
7
|
* local storage (`~/.claude/.credentials.json`) and calls the Anthropic usage API.
|
|
8
|
+
* If the access token is stale or rejected, it attempts one OAuth refresh and retries.
|
|
8
9
|
*
|
|
9
10
|
* @param timeoutMs - Request timeout in milliseconds (default: 5000ms)
|
|
10
|
-
* @returns A promise resolving to ClaudeUsageData
|
|
11
|
-
* missing, expired, or the API request fails.
|
|
11
|
+
* @returns A promise resolving to ClaudeUsageData.
|
|
12
12
|
*/
|
|
13
13
|
export declare function fetchClaudeRateLimits(timeoutMs?: number): Promise<ClaudeUsageData>;
|
|
14
14
|
//# sourceMappingURL=claude.d.ts.map
|
package/dist/claude.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../src/claude.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAGlD,YAAY,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../src/claude.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAGlD,YAAY,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAmMrE;;;;;;;;;GASG;AACH,wBAAsB,qBAAqB,CAAC,SAAS,GAAE,MAAa,GAAG,OAAO,CAAC,eAAe,CAAC,CA4F9F"}
|
package/dist/claude.js
CHANGED
|
@@ -1,12 +1,19 @@
|
|
|
1
1
|
import fs from "node:fs";
|
|
2
2
|
import path from "node:path";
|
|
3
3
|
import { QuotaFetchError } from "./errors.js";
|
|
4
|
+
const CLAUDE_OAUTH_TOKEN_URL = process.env.CLAUDE_CODE_OAUTH_TOKEN_URL ?? "https://platform.claude.com/v1/oauth/token";
|
|
5
|
+
const CLAUDE_OAUTH_CLIENT_ID = process.env.CLAUDE_CODE_OAUTH_CLIENT_ID ?? "9d1c250a-e61b-44d9-88ed-5944d1962f5e";
|
|
6
|
+
const CLAUDE_OAUTH_SCOPES = process.env.CLAUDE_CODE_OAUTH_SCOPES ??
|
|
7
|
+
"user:profile user:inference user:sessions:claude_code user:mcp_servers";
|
|
4
8
|
function getClaudeConfigDir() {
|
|
5
9
|
const home = process.env.USERPROFILE ?? process.env.HOME ?? "";
|
|
6
10
|
return path.join(home, ".claude");
|
|
7
11
|
}
|
|
12
|
+
function getClaudeCredentialsPath() {
|
|
13
|
+
return path.join(getClaudeConfigDir(), ".credentials.json");
|
|
14
|
+
}
|
|
8
15
|
function readClaudeCredentials() {
|
|
9
|
-
const credsPath =
|
|
16
|
+
const credsPath = getClaudeCredentialsPath();
|
|
10
17
|
try {
|
|
11
18
|
if (!fs.existsSync(credsPath)) {
|
|
12
19
|
throw new QuotaFetchError("no_credentials", `Claude credentials not found at ${credsPath}`);
|
|
@@ -34,9 +41,12 @@ function readClaudeCredentials() {
|
|
|
34
41
|
const expiresAt = typeof oauthRecord.expiresAt === "number" && Number.isFinite(oauthRecord.expiresAt)
|
|
35
42
|
? oauthRecord.expiresAt
|
|
36
43
|
: null;
|
|
44
|
+
const refreshToken = typeof oauthRecord.refreshToken === "string" && oauthRecord.refreshToken.length > 0
|
|
45
|
+
? oauthRecord.refreshToken
|
|
46
|
+
: null;
|
|
37
47
|
if (!accessToken || expiresAt === null)
|
|
38
48
|
return null;
|
|
39
|
-
return { accessToken, expiresAt };
|
|
49
|
+
return { accessToken, expiresAt, refreshToken };
|
|
40
50
|
}
|
|
41
51
|
catch (e) {
|
|
42
52
|
if (e instanceof QuotaFetchError)
|
|
@@ -44,15 +54,124 @@ function readClaudeCredentials() {
|
|
|
44
54
|
throw new QuotaFetchError("api_error", "Failed to read Claude credentials.", { cause: e });
|
|
45
55
|
}
|
|
46
56
|
}
|
|
57
|
+
function persistClaudeCredentialsUpdate(creds) {
|
|
58
|
+
const credsPath = getClaudeCredentialsPath();
|
|
59
|
+
try {
|
|
60
|
+
if (!fs.existsSync(credsPath))
|
|
61
|
+
return;
|
|
62
|
+
const raw = fs.readFileSync(credsPath, "utf8");
|
|
63
|
+
const parsed = JSON.parse(raw);
|
|
64
|
+
if (!parsed || typeof parsed !== "object")
|
|
65
|
+
return;
|
|
66
|
+
const record = parsed;
|
|
67
|
+
if (!record.claudeAiOauth || typeof record.claudeAiOauth !== "object")
|
|
68
|
+
return;
|
|
69
|
+
const oauthRecord = record.claudeAiOauth;
|
|
70
|
+
oauthRecord.accessToken = creds.accessToken;
|
|
71
|
+
oauthRecord.expiresAt = creds.expiresAt;
|
|
72
|
+
if (creds.refreshToken) {
|
|
73
|
+
oauthRecord.refreshToken = creds.refreshToken;
|
|
74
|
+
}
|
|
75
|
+
fs.writeFileSync(credsPath, JSON.stringify(record));
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
// Refresh succeeded; a local persistence failure should not fail quota fetch.
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
async function requestClaudeUsage(accessToken, timeoutMs) {
|
|
82
|
+
const controller = new AbortController();
|
|
83
|
+
const timer = setTimeout(() => controller.abort(), timeoutMs);
|
|
84
|
+
try {
|
|
85
|
+
return await fetch("https://api.anthropic.com/api/oauth/usage", {
|
|
86
|
+
method: "GET",
|
|
87
|
+
headers: {
|
|
88
|
+
Authorization: `Bearer ${accessToken}`,
|
|
89
|
+
"Content-Type": "application/json",
|
|
90
|
+
"anthropic-beta": "oauth-2025-04-20"
|
|
91
|
+
},
|
|
92
|
+
signal: controller.signal
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
catch (e) {
|
|
96
|
+
if (e instanceof Error && e.name === "AbortError") {
|
|
97
|
+
throw new QuotaFetchError("timeout", "Claude usage request timed out.", { cause: e });
|
|
98
|
+
}
|
|
99
|
+
throw new QuotaFetchError("network_error", "Claude usage request failed.", { cause: e });
|
|
100
|
+
}
|
|
101
|
+
finally {
|
|
102
|
+
clearTimeout(timer);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
async function refreshClaudeAccessToken(refreshToken, timeoutMs) {
|
|
106
|
+
const controller = new AbortController();
|
|
107
|
+
const timer = setTimeout(() => controller.abort(), timeoutMs);
|
|
108
|
+
let res;
|
|
109
|
+
try {
|
|
110
|
+
res = await fetch(CLAUDE_OAUTH_TOKEN_URL, {
|
|
111
|
+
method: "POST",
|
|
112
|
+
headers: { "Content-Type": "application/json" },
|
|
113
|
+
body: JSON.stringify({
|
|
114
|
+
grant_type: "refresh_token",
|
|
115
|
+
refresh_token: refreshToken,
|
|
116
|
+
client_id: CLAUDE_OAUTH_CLIENT_ID,
|
|
117
|
+
scope: CLAUDE_OAUTH_SCOPES
|
|
118
|
+
}),
|
|
119
|
+
signal: controller.signal
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
catch (e) {
|
|
123
|
+
if (e instanceof Error && e.name === "AbortError") {
|
|
124
|
+
throw new QuotaFetchError("timeout", "Claude OAuth token refresh timed out.", { cause: e });
|
|
125
|
+
}
|
|
126
|
+
throw new QuotaFetchError("network_error", "Claude OAuth token refresh failed.", { cause: e });
|
|
127
|
+
}
|
|
128
|
+
finally {
|
|
129
|
+
clearTimeout(timer);
|
|
130
|
+
}
|
|
131
|
+
if (!res.ok) {
|
|
132
|
+
const reason = res.status >= 400 && res.status < 500 ? "auth_failed" : "api_error";
|
|
133
|
+
throw new QuotaFetchError(reason, `Claude OAuth token refresh failed (${res.status} ${res.statusText}).`, { httpStatus: res.status });
|
|
134
|
+
}
|
|
135
|
+
let data;
|
|
136
|
+
try {
|
|
137
|
+
data = (await res.json());
|
|
138
|
+
}
|
|
139
|
+
catch (e) {
|
|
140
|
+
throw new QuotaFetchError("parse_error", "Claude OAuth token refresh response was invalid.", {
|
|
141
|
+
cause: e
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
if (!data || typeof data !== "object") {
|
|
145
|
+
throw new QuotaFetchError("parse_error", "Claude OAuth token refresh response was invalid.");
|
|
146
|
+
}
|
|
147
|
+
const record = data;
|
|
148
|
+
const accessToken = typeof record.access_token === "string" && record.access_token.length > 0
|
|
149
|
+
? record.access_token
|
|
150
|
+
: null;
|
|
151
|
+
const expiresIn = typeof record.expires_in === "number" && Number.isFinite(record.expires_in)
|
|
152
|
+
? record.expires_in
|
|
153
|
+
: null;
|
|
154
|
+
const nextRefreshToken = typeof record.refresh_token === "string" && record.refresh_token.length > 0
|
|
155
|
+
? record.refresh_token
|
|
156
|
+
: refreshToken;
|
|
157
|
+
if (!accessToken || expiresIn === null) {
|
|
158
|
+
throw new QuotaFetchError("parse_error", "Claude OAuth token refresh response missing required fields.");
|
|
159
|
+
}
|
|
160
|
+
return {
|
|
161
|
+
accessToken,
|
|
162
|
+
refreshToken: nextRefreshToken,
|
|
163
|
+
expiresAt: Date.now() + expiresIn * 1000
|
|
164
|
+
};
|
|
165
|
+
}
|
|
47
166
|
/**
|
|
48
167
|
* Fetches Claude usage data from the Anthropic OAuth usage API.
|
|
49
168
|
*
|
|
50
169
|
* This function attempts to read credentials from the Claude desktop application's
|
|
51
170
|
* local storage (`~/.claude/.credentials.json`) and calls the Anthropic usage API.
|
|
171
|
+
* If the access token is stale or rejected, it attempts one OAuth refresh and retries.
|
|
52
172
|
*
|
|
53
173
|
* @param timeoutMs - Request timeout in milliseconds (default: 5000ms)
|
|
54
|
-
* @returns A promise resolving to ClaudeUsageData
|
|
55
|
-
* missing, expired, or the API request fails.
|
|
174
|
+
* @returns A promise resolving to ClaudeUsageData.
|
|
56
175
|
*/
|
|
57
176
|
export async function fetchClaudeRateLimits(timeoutMs = 5000) {
|
|
58
177
|
try {
|
|
@@ -60,32 +179,32 @@ export async function fetchClaudeRateLimits(timeoutMs = 5000) {
|
|
|
60
179
|
if (!creds) {
|
|
61
180
|
throw new QuotaFetchError("no_credentials", "Claude credentials missing.");
|
|
62
181
|
}
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
let res;
|
|
70
|
-
try {
|
|
71
|
-
res = await fetch("https://api.anthropic.com/api/oauth/usage", {
|
|
72
|
-
method: "GET",
|
|
73
|
-
headers: {
|
|
74
|
-
Authorization: `Bearer ${creds.accessToken}`,
|
|
75
|
-
"Content-Type": "application/json",
|
|
76
|
-
"anthropic-beta": "oauth-2025-04-20"
|
|
77
|
-
},
|
|
78
|
-
signal: controller.signal
|
|
79
|
-
});
|
|
80
|
-
}
|
|
81
|
-
catch (e) {
|
|
82
|
-
if (e instanceof Error && e.name === "AbortError") {
|
|
83
|
-
throw new QuotaFetchError("timeout", "Claude usage request timed out.", { cause: e });
|
|
182
|
+
let accessToken = creds.accessToken;
|
|
183
|
+
let refreshToken = creds.refreshToken;
|
|
184
|
+
let didRefresh = false;
|
|
185
|
+
const refreshAndPersist = async () => {
|
|
186
|
+
if (!refreshToken) {
|
|
187
|
+
throw new QuotaFetchError("token_expired", "Claude access token is expired.");
|
|
84
188
|
}
|
|
85
|
-
|
|
189
|
+
const refreshed = await refreshClaudeAccessToken(refreshToken, timeoutMs);
|
|
190
|
+
accessToken = refreshed.accessToken;
|
|
191
|
+
refreshToken = refreshed.refreshToken;
|
|
192
|
+
persistClaudeCredentialsUpdate(refreshed);
|
|
193
|
+
didRefresh = true;
|
|
194
|
+
};
|
|
195
|
+
// Check token expiry with 5-minute buffer.
|
|
196
|
+
if (Date.now() + 300_000 >= creds.expiresAt) {
|
|
197
|
+
await refreshAndPersist();
|
|
86
198
|
}
|
|
87
|
-
|
|
88
|
-
|
|
199
|
+
let res = await requestClaudeUsage(accessToken, timeoutMs);
|
|
200
|
+
// Claude sometimes returns 429 for stale/revoked tokens while normal model calls still work.
|
|
201
|
+
// Retry once with a fresh OAuth token before failing.
|
|
202
|
+
if (!res.ok &&
|
|
203
|
+
(res.status === 401 || res.status === 403 || res.status === 429) &&
|
|
204
|
+
!didRefresh &&
|
|
205
|
+
refreshToken) {
|
|
206
|
+
await refreshAndPersist();
|
|
207
|
+
res = await requestClaudeUsage(accessToken, timeoutMs);
|
|
89
208
|
}
|
|
90
209
|
if (!res.ok) {
|
|
91
210
|
const reason = res.status === 401 || res.status === 403 ? "auth_failed" : "api_error";
|
package/dist/claude.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude.js","sourceRoot":"","sources":["../src/claude.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAI9C,SAAS,kBAAkB;IACzB,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;IAC/D,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;AACpC,CAAC;AAED,SAAS,
|
|
1
|
+
{"version":3,"file":"claude.js","sourceRoot":"","sources":["../src/claude.ts"],"names":[],"mappings":"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"}
|
package/dist/copilot.d.ts
CHANGED
|
@@ -1,18 +1,32 @@
|
|
|
1
|
+
import * as fs from "node:fs";
|
|
1
2
|
import type { CopilotUsage } from "./types.js";
|
|
2
3
|
export type { CopilotUsage } from "./types.js";
|
|
4
|
+
type CopilotTokenRuntime = {
|
|
5
|
+
execFileText?: (command: string, args: string[]) => string;
|
|
6
|
+
existsSync?: typeof fs.existsSync;
|
|
7
|
+
readFileSync?: typeof fs.readFileSync;
|
|
8
|
+
writeFileSync?: typeof fs.writeFileSync;
|
|
9
|
+
unlinkSync?: typeof fs.unlinkSync;
|
|
10
|
+
homeDir?: string;
|
|
11
|
+
platform?: NodeJS.Platform;
|
|
12
|
+
tmpDir?: string;
|
|
13
|
+
};
|
|
3
14
|
/**
|
|
4
15
|
* Resolves a GitHub Copilot token from environment variables,
|
|
5
|
-
*
|
|
16
|
+
* Copilot CLI / GitHub CLI authentication stores, or the 'gh' CLI command.
|
|
6
17
|
*
|
|
7
18
|
* Order of discovery:
|
|
8
|
-
* 1.
|
|
9
|
-
* 2.
|
|
10
|
-
* 3.
|
|
19
|
+
* 1. COPILOT_GITHUB_TOKEN environment variable
|
|
20
|
+
* 2. GH_TOKEN environment variable
|
|
21
|
+
* 3. GITHUB_TOKEN environment variable
|
|
22
|
+
* 4. Copilot CLI stored credentials (~/.copilot/config.json or Windows Credential Manager)
|
|
23
|
+
* 5. GitHub CLI configuration file (~/.config/gh/hosts.yml)
|
|
24
|
+
* 6. `gh auth token` command execution
|
|
11
25
|
*
|
|
12
26
|
* @param verbose - Whether to print debug information to stderr
|
|
13
27
|
* @returns The discovered token or null if no token source is found
|
|
14
28
|
*/
|
|
15
|
-
export declare function getCopilotToken(verbose?: boolean): string | null;
|
|
29
|
+
export declare function getCopilotToken(verbose?: boolean, runtimeOverrides?: CopilotTokenRuntime): string | null;
|
|
16
30
|
export type FetchCopilotRateLimitsOptions = {
|
|
17
31
|
token: string;
|
|
18
32
|
timeoutSeconds?: number;
|
package/dist/copilot.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"copilot.d.ts","sourceRoot":"","sources":["../src/copilot.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"copilot.d.ts","sourceRoot":"","sources":["../src/copilot.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAG9B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG/C,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAe/C,KAAK,mBAAmB,GAAG;IACzB,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,MAAM,CAAC;IAC3D,UAAU,CAAC,EAAE,OAAO,EAAE,CAAC,UAAU,CAAC;IAClC,YAAY,CAAC,EAAE,OAAO,EAAE,CAAC,YAAY,CAAC;IACtC,aAAa,CAAC,EAAE,OAAO,EAAE,CAAC,aAAa,CAAC;IACxC,UAAU,CAAC,EAAE,OAAO,EAAE,CAAC,UAAU,CAAC;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AA4RF;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,eAAe,CAC7B,OAAO,GAAE,OAAe,EACxB,gBAAgB,GAAE,mBAAwB,GACzC,MAAM,GAAG,IAAI,CA0Ef;AAKD,MAAM,MAAM,6BAA6B,GAAG;IAC1C,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AA4BF;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,GAAE,IAAiB,GAAG,YAAY,GAAG,IAAI,CA8BhG;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,MAAM,EACnB,GAAG,GAAE,IAAiB,GACrB,YAAY,GAAG,IAAI,CA6BrB;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,6BAA6B,EACtC,GAAG,GAAE,IAAiB,GACrB,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAoE9B"}
|
package/dist/copilot.js
CHANGED
|
@@ -1,37 +1,312 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import
|
|
1
|
+
import * as childProcess from "node:child_process";
|
|
2
|
+
import * as fs from "node:fs";
|
|
3
|
+
import * as os from "node:os";
|
|
4
|
+
import * as path from "node:path";
|
|
5
5
|
import { QuotaFetchError } from "./errors.js";
|
|
6
|
+
const WINDOWS_CRED_READ_PS1 = [
|
|
7
|
+
"param([string]$Target)",
|
|
8
|
+
"$ErrorActionPreference = 'Stop'",
|
|
9
|
+
"$code = @'",
|
|
10
|
+
"using System;",
|
|
11
|
+
"using System.Runtime.InteropServices;",
|
|
12
|
+
"",
|
|
13
|
+
"public static class CredMan {",
|
|
14
|
+
" [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]",
|
|
15
|
+
" public struct CREDENTIAL {",
|
|
16
|
+
" public int Flags;",
|
|
17
|
+
" public int Type;",
|
|
18
|
+
" public string TargetName;",
|
|
19
|
+
" public string Comment;",
|
|
20
|
+
" public System.Runtime.InteropServices.ComTypes.FILETIME LastWritten;",
|
|
21
|
+
" public int CredentialBlobSize;",
|
|
22
|
+
" public IntPtr CredentialBlob;",
|
|
23
|
+
" public int Persist;",
|
|
24
|
+
" public int AttributeCount;",
|
|
25
|
+
" public IntPtr Attributes;",
|
|
26
|
+
" public string TargetAlias;",
|
|
27
|
+
" public string UserName;",
|
|
28
|
+
" }",
|
|
29
|
+
"",
|
|
30
|
+
' [DllImport("Advapi32.dll", EntryPoint = "CredReadW", CharSet = CharSet.Unicode, SetLastError = true)]',
|
|
31
|
+
" public static extern bool CredRead(string target, int type, int reservedFlag, out IntPtr credentialPtr);",
|
|
32
|
+
"",
|
|
33
|
+
' [DllImport("Advapi32.dll", SetLastError = true)]',
|
|
34
|
+
" public static extern void CredFree([In] IntPtr cred);",
|
|
35
|
+
"",
|
|
36
|
+
" public static byte[] ReadGenericBytes(string target) {",
|
|
37
|
+
" IntPtr credPtr;",
|
|
38
|
+
" if (!CredRead(target, 1, 0, out credPtr)) {",
|
|
39
|
+
" return null;",
|
|
40
|
+
" }",
|
|
41
|
+
"",
|
|
42
|
+
" try {",
|
|
43
|
+
" var cred = (CREDENTIAL)Marshal.PtrToStructure(credPtr, typeof(CREDENTIAL));",
|
|
44
|
+
" if (cred.CredentialBlob == IntPtr.Zero || cred.CredentialBlobSize <= 0) {",
|
|
45
|
+
" return null;",
|
|
46
|
+
" }",
|
|
47
|
+
"",
|
|
48
|
+
" byte[] blob = new byte[cred.CredentialBlobSize];",
|
|
49
|
+
" Marshal.Copy(cred.CredentialBlob, blob, 0, cred.CredentialBlobSize);",
|
|
50
|
+
" return blob;",
|
|
51
|
+
" } finally {",
|
|
52
|
+
" CredFree(credPtr);",
|
|
53
|
+
" }",
|
|
54
|
+
" }",
|
|
55
|
+
"}",
|
|
56
|
+
"'@",
|
|
57
|
+
"Add-Type -TypeDefinition $code",
|
|
58
|
+
"$bytes = [CredMan]::ReadGenericBytes($Target)",
|
|
59
|
+
"if ($null -eq $bytes) {",
|
|
60
|
+
" exit 0",
|
|
61
|
+
"}",
|
|
62
|
+
"[Console]::Out.Write([Convert]::ToBase64String($bytes))"
|
|
63
|
+
].join("\n");
|
|
64
|
+
function normalizeTokenString(value) {
|
|
65
|
+
if (typeof value !== "string")
|
|
66
|
+
return null;
|
|
67
|
+
const trimmed = value.trim();
|
|
68
|
+
return trimmed.length > 0 ? trimmed : null;
|
|
69
|
+
}
|
|
70
|
+
function scoreCopilotTokenCandidate(value) {
|
|
71
|
+
if (!value)
|
|
72
|
+
return 0;
|
|
73
|
+
if (/^(gho_|ghu_|github_pat_)/.test(value))
|
|
74
|
+
return 3;
|
|
75
|
+
if (/^[A-Za-z0-9_]{20,}$/.test(value))
|
|
76
|
+
return 2;
|
|
77
|
+
if (/^[\x20-\x7e]{12,}$/.test(value))
|
|
78
|
+
return 1;
|
|
79
|
+
return 0;
|
|
80
|
+
}
|
|
81
|
+
function execFileText(command, args) {
|
|
82
|
+
return childProcess.execFileSync(command, args, {
|
|
83
|
+
encoding: "utf8",
|
|
84
|
+
stdio: ["ignore", "pipe", "ignore"],
|
|
85
|
+
windowsHide: true
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
function resolveHomeDir() {
|
|
89
|
+
return process.env.HOME || process.env.USERPROFILE || os.homedir();
|
|
90
|
+
}
|
|
91
|
+
function createCopilotTokenRuntime(overrides = {}) {
|
|
92
|
+
return {
|
|
93
|
+
execFileText: overrides.execFileText ?? execFileText,
|
|
94
|
+
existsSync: overrides.existsSync ?? fs.existsSync,
|
|
95
|
+
readFileSync: overrides.readFileSync ?? fs.readFileSync,
|
|
96
|
+
writeFileSync: overrides.writeFileSync ?? fs.writeFileSync,
|
|
97
|
+
unlinkSync: overrides.unlinkSync ?? fs.unlinkSync,
|
|
98
|
+
homeDir: overrides.homeDir ?? resolveHomeDir(),
|
|
99
|
+
platform: overrides.platform ?? process.platform,
|
|
100
|
+
tmpDir: overrides.tmpDir ?? os.tmpdir()
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
function getCopilotConfigPath(runtime) {
|
|
104
|
+
return path.join(runtime.homeDir, ".copilot", "config.json");
|
|
105
|
+
}
|
|
106
|
+
function readCopilotCliConfig(runtime, verbose) {
|
|
107
|
+
const configPath = getCopilotConfigPath(runtime);
|
|
108
|
+
if (!runtime.existsSync(configPath))
|
|
109
|
+
return null;
|
|
110
|
+
if (verbose)
|
|
111
|
+
process.stderr.write(`[verbose] copilot: checking ${configPath}\n`);
|
|
112
|
+
try {
|
|
113
|
+
const parsed = JSON.parse(runtime.readFileSync(configPath, "utf8"));
|
|
114
|
+
return parsed && typeof parsed === "object" ? parsed : null;
|
|
115
|
+
}
|
|
116
|
+
catch {
|
|
117
|
+
return null;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
function normalizeCopilotHost(host) {
|
|
121
|
+
const trimmed = host.trim();
|
|
122
|
+
if (!trimmed)
|
|
123
|
+
return "";
|
|
124
|
+
return trimmed.includes("://") ? trimmed : `https://${trimmed}`;
|
|
125
|
+
}
|
|
126
|
+
function collectCopilotCliAccounts(config) {
|
|
127
|
+
if (!config)
|
|
128
|
+
return [];
|
|
129
|
+
const accounts = [];
|
|
130
|
+
const seen = new Set();
|
|
131
|
+
const rawAccounts = [config.last_logged_in_user, ...(config.logged_in_users ?? [])];
|
|
132
|
+
for (const account of rawAccounts) {
|
|
133
|
+
const host = normalizeTokenString(account?.host);
|
|
134
|
+
const login = normalizeTokenString(account?.login);
|
|
135
|
+
if (!host || !login)
|
|
136
|
+
continue;
|
|
137
|
+
const normalizedHost = normalizeCopilotHost(host);
|
|
138
|
+
const key = `${normalizedHost}\n${login}`;
|
|
139
|
+
if (seen.has(key))
|
|
140
|
+
continue;
|
|
141
|
+
seen.add(key);
|
|
142
|
+
accounts.push({
|
|
143
|
+
host: normalizedHost,
|
|
144
|
+
login,
|
|
145
|
+
access_token: normalizeTokenString(account?.access_token) ?? undefined
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
return accounts;
|
|
149
|
+
}
|
|
150
|
+
function getPlaintextCopilotToken(config) {
|
|
151
|
+
if (!config)
|
|
152
|
+
return null;
|
|
153
|
+
const candidates = [
|
|
154
|
+
normalizeTokenString(config.access_token),
|
|
155
|
+
normalizeTokenString(config.last_logged_in_user?.access_token),
|
|
156
|
+
...collectCopilotCliAccounts(config).map((account) => normalizeTokenString(account.access_token))
|
|
157
|
+
];
|
|
158
|
+
for (const candidate of candidates) {
|
|
159
|
+
if (scoreCopilotTokenCandidate(candidate) > 0)
|
|
160
|
+
return candidate;
|
|
161
|
+
}
|
|
162
|
+
return null;
|
|
163
|
+
}
|
|
164
|
+
function parseWindowsCredentialTargets(output) {
|
|
165
|
+
return [...output.matchAll(/^\s*Target:\s+(?:LegacyGeneric:target=)?([^\r\n]+)\s*$/gm)]
|
|
166
|
+
.map((match) => normalizeTokenString(match[1]))
|
|
167
|
+
.filter((target) => Boolean(target));
|
|
168
|
+
}
|
|
169
|
+
function resolvePowerShellExecutable(runtime) {
|
|
170
|
+
const candidates = [
|
|
171
|
+
path.join(process.env.ProgramFiles ?? "", "PowerShell", "7", "pwsh.exe"),
|
|
172
|
+
path.join(process.env.SystemRoot ?? "C:\\Windows", "System32", "WindowsPowerShell", "v1.0", "powershell.exe"),
|
|
173
|
+
"pwsh.exe",
|
|
174
|
+
"powershell.exe"
|
|
175
|
+
];
|
|
176
|
+
for (const candidate of candidates) {
|
|
177
|
+
if (!candidate)
|
|
178
|
+
continue;
|
|
179
|
+
if (!path.isAbsolute(candidate) || runtime.existsSync(candidate))
|
|
180
|
+
return candidate;
|
|
181
|
+
}
|
|
182
|
+
return "powershell.exe";
|
|
183
|
+
}
|
|
184
|
+
function decodeWindowsCredentialBlob(encoded) {
|
|
185
|
+
const trimmed = normalizeTokenString(encoded);
|
|
186
|
+
if (!trimmed)
|
|
187
|
+
return null;
|
|
188
|
+
const bytes = Buffer.from(trimmed, "base64");
|
|
189
|
+
if (bytes.length === 0)
|
|
190
|
+
return null;
|
|
191
|
+
const utf8 = normalizeTokenString(bytes.toString("utf8").replace(/\0+$/g, ""));
|
|
192
|
+
const utf16 = normalizeTokenString(bytes.toString("utf16le").replace(/\0+$/g, ""));
|
|
193
|
+
const utf8Score = scoreCopilotTokenCandidate(utf8);
|
|
194
|
+
const utf16Score = scoreCopilotTokenCandidate(utf16);
|
|
195
|
+
if (utf8Score === 0 && utf16Score === 0)
|
|
196
|
+
return null;
|
|
197
|
+
return utf8Score >= utf16Score ? utf8 : utf16;
|
|
198
|
+
}
|
|
199
|
+
function readWindowsCredentialToken(runtime, target) {
|
|
200
|
+
const scriptPath = path.join(runtime.tmpDir, `ai-quota-copilot-cred-${process.pid}-${Date.now()}.ps1`);
|
|
201
|
+
const shell = resolvePowerShellExecutable(runtime);
|
|
202
|
+
try {
|
|
203
|
+
runtime.writeFileSync(scriptPath, WINDOWS_CRED_READ_PS1, "utf8");
|
|
204
|
+
const encoded = runtime.execFileText(shell, [
|
|
205
|
+
"-NoProfile",
|
|
206
|
+
"-NonInteractive",
|
|
207
|
+
"-File",
|
|
208
|
+
scriptPath,
|
|
209
|
+
target
|
|
210
|
+
]);
|
|
211
|
+
return decodeWindowsCredentialBlob(encoded);
|
|
212
|
+
}
|
|
213
|
+
catch {
|
|
214
|
+
return null;
|
|
215
|
+
}
|
|
216
|
+
finally {
|
|
217
|
+
try {
|
|
218
|
+
runtime.unlinkSync(scriptPath);
|
|
219
|
+
}
|
|
220
|
+
catch {
|
|
221
|
+
// ignore cleanup errors
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
function getWindowsCopilotCredentialTargets(runtime, config) {
|
|
226
|
+
const targets = [];
|
|
227
|
+
const seen = new Set();
|
|
228
|
+
const addTarget = (target) => {
|
|
229
|
+
const normalized = normalizeTokenString(target);
|
|
230
|
+
if (!normalized || seen.has(normalized))
|
|
231
|
+
return;
|
|
232
|
+
seen.add(normalized);
|
|
233
|
+
targets.push(normalized);
|
|
234
|
+
};
|
|
235
|
+
for (const account of collectCopilotCliAccounts(config)) {
|
|
236
|
+
addTarget(`copilot-cli/${account.host}:${account.login}`);
|
|
237
|
+
}
|
|
238
|
+
try {
|
|
239
|
+
const output = runtime.execFileText("cmdkey.exe", ["/list"]);
|
|
240
|
+
for (const target of parseWindowsCredentialTargets(output)) {
|
|
241
|
+
if (target.startsWith("copilot-cli/"))
|
|
242
|
+
addTarget(target);
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
catch {
|
|
246
|
+
// ignore
|
|
247
|
+
}
|
|
248
|
+
return targets;
|
|
249
|
+
}
|
|
6
250
|
/**
|
|
7
251
|
* Resolves a GitHub Copilot token from environment variables,
|
|
8
|
-
*
|
|
252
|
+
* Copilot CLI / GitHub CLI authentication stores, or the 'gh' CLI command.
|
|
9
253
|
*
|
|
10
254
|
* Order of discovery:
|
|
11
|
-
* 1.
|
|
12
|
-
* 2.
|
|
13
|
-
* 3.
|
|
255
|
+
* 1. COPILOT_GITHUB_TOKEN environment variable
|
|
256
|
+
* 2. GH_TOKEN environment variable
|
|
257
|
+
* 3. GITHUB_TOKEN environment variable
|
|
258
|
+
* 4. Copilot CLI stored credentials (~/.copilot/config.json or Windows Credential Manager)
|
|
259
|
+
* 5. GitHub CLI configuration file (~/.config/gh/hosts.yml)
|
|
260
|
+
* 6. `gh auth token` command execution
|
|
14
261
|
*
|
|
15
262
|
* @param verbose - Whether to print debug information to stderr
|
|
16
263
|
* @returns The discovered token or null if no token source is found
|
|
17
264
|
*/
|
|
18
|
-
export function getCopilotToken(verbose = false) {
|
|
19
|
-
|
|
265
|
+
export function getCopilotToken(verbose = false, runtimeOverrides = {}) {
|
|
266
|
+
const runtime = createCopilotTokenRuntime(runtimeOverrides);
|
|
267
|
+
const envSources = [
|
|
268
|
+
["COPILOT_GITHUB_TOKEN", process.env.COPILOT_GITHUB_TOKEN],
|
|
269
|
+
["GH_TOKEN", process.env.GH_TOKEN],
|
|
270
|
+
["GITHUB_TOKEN", process.env.GITHUB_TOKEN]
|
|
271
|
+
];
|
|
272
|
+
for (const [name, value] of envSources) {
|
|
273
|
+
const token = normalizeTokenString(value);
|
|
274
|
+
if (!token)
|
|
275
|
+
continue;
|
|
276
|
+
if (verbose)
|
|
277
|
+
process.stderr.write(`[verbose] copilot: using token from ${name} env var\n`);
|
|
278
|
+
return token;
|
|
279
|
+
}
|
|
280
|
+
const copilotConfig = readCopilotCliConfig(runtime, verbose);
|
|
281
|
+
const plaintextToken = getPlaintextCopilotToken(copilotConfig);
|
|
282
|
+
if (plaintextToken) {
|
|
20
283
|
if (verbose)
|
|
21
|
-
process.stderr.write("[verbose] copilot:
|
|
22
|
-
return
|
|
284
|
+
process.stderr.write("[verbose] copilot: found plaintext token in ~/.copilot/config.json\n");
|
|
285
|
+
return plaintextToken;
|
|
286
|
+
}
|
|
287
|
+
if (runtime.platform === "win32") {
|
|
288
|
+
for (const target of getWindowsCopilotCredentialTargets(runtime, copilotConfig)) {
|
|
289
|
+
if (verbose)
|
|
290
|
+
process.stderr.write(`[verbose] copilot: checking Windows Credential Manager target ${target}\n`);
|
|
291
|
+
const token = readWindowsCredentialToken(runtime, target);
|
|
292
|
+
if (token) {
|
|
293
|
+
if (verbose)
|
|
294
|
+
process.stderr.write(`[verbose] copilot: found token in Windows Credential Manager (${target})\n`);
|
|
295
|
+
return token;
|
|
296
|
+
}
|
|
297
|
+
}
|
|
23
298
|
}
|
|
24
299
|
const candidates = [
|
|
25
|
-
path.join(
|
|
26
|
-
path.join(
|
|
300
|
+
path.join(runtime.homeDir, ".config", "gh", "hosts.yml"),
|
|
301
|
+
path.join(runtime.homeDir, "AppData", "Roaming", "GitHub CLI", "hosts.yml")
|
|
27
302
|
];
|
|
28
303
|
for (const p of candidates) {
|
|
29
304
|
try {
|
|
30
|
-
if (!
|
|
305
|
+
if (!runtime.existsSync(p))
|
|
31
306
|
continue;
|
|
32
307
|
if (verbose)
|
|
33
308
|
process.stderr.write(`[verbose] copilot: checking ${p}\n`);
|
|
34
|
-
const content =
|
|
309
|
+
const content = runtime.readFileSync(p, "utf8");
|
|
35
310
|
// Simple line-by-line search for oauth_token under github.com
|
|
36
311
|
const match = content.match(/oauth_token:\s*(\S+)/);
|
|
37
312
|
if (match?.[1]) {
|
|
@@ -48,10 +323,7 @@ export function getCopilotToken(verbose = false) {
|
|
|
48
323
|
try {
|
|
49
324
|
if (verbose)
|
|
50
325
|
process.stderr.write("[verbose] copilot: trying 'gh auth token --hostname github.com'\n");
|
|
51
|
-
const token =
|
|
52
|
-
encoding: "utf8",
|
|
53
|
-
stdio: ["ignore", "pipe", "ignore"]
|
|
54
|
-
}).trim();
|
|
326
|
+
const token = runtime.execFileText("gh", ["auth", "token", "--hostname", "github.com"]).trim();
|
|
55
327
|
if (token) {
|
|
56
328
|
if (verbose)
|
|
57
329
|
process.stderr.write("[verbose] copilot: found token via gh CLI\n");
|
package/dist/copilot.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"copilot.js","sourceRoot":"","sources":["../src/copilot.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"copilot.js","sourceRoot":"","sources":["../src/copilot.ts"],"names":[],"mappings":"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"}
|