better-opencode-openai-codex-auth 0.1.2 → 0.1.4
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 +5 -17
- package/config/README.md +14 -93
- package/config/minimal-opencode.json +1 -1
- package/config/opencode-modern.json +26 -107
- package/dist/index.d.ts +0 -12
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +195 -94
- package/dist/index.js.map +1 -1
- package/dist/lib/account-pool.d.ts +29 -3
- package/dist/lib/account-pool.d.ts.map +1 -1
- package/dist/lib/account-pool.js +210 -47
- package/dist/lib/account-pool.js.map +1 -1
- package/dist/lib/auth/auth.d.ts +55 -4
- package/dist/lib/auth/auth.d.ts.map +1 -1
- package/dist/lib/auth/auth.js +130 -6
- package/dist/lib/auth/auth.js.map +1 -1
- package/dist/lib/auth/ui/account-menu.d.ts +50 -0
- package/dist/lib/auth/ui/account-menu.d.ts.map +1 -0
- package/dist/lib/auth/ui/account-menu.js +258 -0
- package/dist/lib/auth/ui/account-menu.js.map +1 -0
- package/dist/lib/auth/ui/ansi.d.ts +23 -0
- package/dist/lib/auth/ui/ansi.d.ts.map +1 -0
- package/dist/lib/auth/ui/ansi.js +37 -0
- package/dist/lib/auth/ui/ansi.js.map +1 -0
- package/dist/lib/auth/ui/confirm.d.ts +2 -0
- package/dist/lib/auth/ui/confirm.d.ts.map +1 -0
- package/dist/lib/auth/ui/confirm.js +8 -0
- package/dist/lib/auth/ui/confirm.js.map +1 -0
- package/dist/lib/auth/ui/select.d.ts +21 -0
- package/dist/lib/auth/ui/select.d.ts.map +1 -0
- package/dist/lib/auth/ui/select.js +208 -0
- package/dist/lib/auth/ui/select.js.map +1 -0
- package/dist/lib/constants.d.ts +51 -3
- package/dist/lib/constants.d.ts.map +1 -1
- package/dist/lib/constants.js +55 -3
- package/dist/lib/constants.js.map +1 -1
- package/dist/lib/refresh-queue.d.ts +56 -0
- package/dist/lib/refresh-queue.d.ts.map +1 -0
- package/dist/lib/refresh-queue.js +148 -0
- package/dist/lib/refresh-queue.js.map +1 -0
- package/dist/lib/request/fetch-helpers.d.ts +2 -1
- package/dist/lib/request/fetch-helpers.d.ts.map +1 -1
- package/dist/lib/request/fetch-helpers.js +23 -3
- package/dist/lib/request/fetch-helpers.js.map +1 -1
- package/dist/lib/types.d.ts +18 -2
- package/dist/lib/types.d.ts.map +1 -1
- package/package.json +1 -2
- package/scripts/install-opencode-codex-auth.js +10 -29
- package/config/opencode-legacy.json +0 -571
package/dist/index.js
CHANGED
|
@@ -21,14 +21,34 @@
|
|
|
21
21
|
* @author ShivamB25 (fork maintainer); originally by numman-ali
|
|
22
22
|
* @repository https://github.com/ShivamB25/better-opencode-openai-codex-auth
|
|
23
23
|
*/
|
|
24
|
-
import
|
|
24
|
+
import os from "node:os";
|
|
25
|
+
import { createAuthorizationFlow, createDeviceAuthorizationFlow, extractAccountId, extractAccountIdFromToken, exchangeAuthorizationCode, parseAuthorizationInput, refreshAccessTokenShared, REDIRECT_URI, } from "./lib/auth/auth.js";
|
|
25
26
|
import { openBrowserUrl } from "./lib/auth/browser.js";
|
|
26
27
|
import { startLocalOAuthServer } from "./lib/auth/server.js";
|
|
28
|
+
import { showAccountManager } from "./lib/auth/ui/account-menu.js";
|
|
27
29
|
import { getCodexMode, loadPluginConfig } from "./lib/config.js";
|
|
28
|
-
import { AUTH_LABELS, CODEX_BASE_URL, DUMMY_API_KEY, ERROR_MESSAGES,
|
|
30
|
+
import { AUTH_LABELS, CODEX_BASE_URL, DUMMY_API_KEY, ERROR_MESSAGES, LOG_STAGES, MAX_RECOVERY_WAIT_MS, PLUGIN_NAME, PLUGIN_VERSION, PROVIDER_ID, } from "./lib/constants.js";
|
|
29
31
|
import { logRequest, logDebug, logWarn } from "./lib/logger.js";
|
|
30
32
|
import { createCodexHeaders, extractRequestUrl, handleErrorResponse, handleSuccessResponse, rewriteUrlForCodex, transformRequestForCodex, } from "./lib/request/fetch-helpers.js";
|
|
31
33
|
import { AccountPool } from "./lib/account-pool.js";
|
|
34
|
+
import { ProactiveRefreshQueue } from "./lib/refresh-queue.js";
|
|
35
|
+
/**
|
|
36
|
+
* Parse a ChatGPT error code from a 429 response body.
|
|
37
|
+
* Used for tiered cooldown durations (#10).
|
|
38
|
+
*/
|
|
39
|
+
async function parseErrorCode(response) {
|
|
40
|
+
try {
|
|
41
|
+
const clone = response.clone();
|
|
42
|
+
const text = await clone.text();
|
|
43
|
+
if (!text)
|
|
44
|
+
return undefined;
|
|
45
|
+
const parsed = JSON.parse(text);
|
|
46
|
+
return (parsed?.error?.code ?? parsed?.error?.type) || undefined;
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
return undefined;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
32
52
|
/**
|
|
33
53
|
* Build a 429 response when all accounts are rate-limited
|
|
34
54
|
* @param retryAfterMs - Minimum retry-after time from pool, or null
|
|
@@ -52,18 +72,6 @@ function buildAllRateLimitedResponse(retryAfterMs) {
|
|
|
52
72
|
}
|
|
53
73
|
/**
|
|
54
74
|
* OpenAI Codex OAuth authentication plugin for opencode
|
|
55
|
-
*
|
|
56
|
-
* This plugin enables opencode to use OpenAI's Codex backend via ChatGPT Plus/Pro
|
|
57
|
-
* OAuth authentication, allowing users to leverage their ChatGPT subscription
|
|
58
|
-
* instead of OpenAI Platform API credits.
|
|
59
|
-
*
|
|
60
|
-
* @example
|
|
61
|
-
* ```json
|
|
62
|
-
* {
|
|
63
|
-
* "plugin": ["better-opencode-openai-codex-auth"],
|
|
64
|
-
* "model": "openai/gpt-5-codex"
|
|
65
|
-
* }
|
|
66
|
-
* ```
|
|
67
75
|
*/
|
|
68
76
|
export const OpenAIAuthPlugin = async ({ client }) => {
|
|
69
77
|
const buildManualOAuthFlow = (pkce, url) => ({
|
|
@@ -76,35 +84,36 @@ export const OpenAIAuthPlugin = async ({ client }) => {
|
|
|
76
84
|
return { type: "failed" };
|
|
77
85
|
}
|
|
78
86
|
const tokens = await exchangeAuthorizationCode(parsed.code, pkce.verifier, REDIRECT_URI);
|
|
79
|
-
|
|
87
|
+
if (tokens?.type !== "success")
|
|
88
|
+
return { type: "failed" };
|
|
89
|
+
return {
|
|
90
|
+
...tokens,
|
|
91
|
+
accountId: extractAccountId({
|
|
92
|
+
access_token: tokens.access,
|
|
93
|
+
id_token: tokens.id_token,
|
|
94
|
+
}),
|
|
95
|
+
};
|
|
80
96
|
},
|
|
81
97
|
});
|
|
82
98
|
return {
|
|
83
99
|
auth: {
|
|
84
100
|
provider: PROVIDER_ID,
|
|
85
101
|
/**
|
|
86
|
-
* Loader
|
|
87
|
-
*
|
|
88
|
-
* This function:
|
|
89
|
-
* 1. Validates OAuth authentication
|
|
90
|
-
* 2. Extracts ChatGPT account ID from access token
|
|
91
|
-
* 3. Loads user configuration from opencode.json
|
|
92
|
-
* 4. Fetches Codex system instructions from GitHub (cached)
|
|
93
|
-
* 5. Returns SDK configuration with custom fetch implementation
|
|
94
|
-
*
|
|
95
|
-
* @param getAuth - Function to retrieve current auth state
|
|
96
|
-
* @param provider - Provider configuration from opencode.json
|
|
97
|
-
* @returns SDK configuration object or empty object for non-OAuth auth
|
|
102
|
+
* Loader: validates OAuth auth, sets up per-account token management,
|
|
103
|
+
* starts proactive background refresh, and returns the custom fetch.
|
|
98
104
|
*/
|
|
99
105
|
async loader(getAuth, provider) {
|
|
100
106
|
const auth = await getAuth();
|
|
101
|
-
// Only handle OAuth auth type
|
|
107
|
+
// Only handle OAuth auth type
|
|
102
108
|
if (auth.type !== "oauth") {
|
|
103
109
|
return {};
|
|
104
110
|
}
|
|
105
|
-
// Extract ChatGPT account ID
|
|
106
|
-
|
|
107
|
-
const
|
|
111
|
+
// Extract ChatGPT account ID — prefer stored accountId (#5), then id_token,
|
|
112
|
+
// then decode access token (checks root + nested JWT claim locations)
|
|
113
|
+
const authWithAccount = auth;
|
|
114
|
+
let accountId = authWithAccount.accountId ||
|
|
115
|
+
(authWithAccount.id_token ? extractAccountIdFromToken(authWithAccount.id_token) : undefined) ||
|
|
116
|
+
extractAccountIdFromToken(auth.access);
|
|
108
117
|
if (!accountId) {
|
|
109
118
|
logDebug(`[${PLUGIN_NAME}] ${ERROR_MESSAGES.NO_ACCOUNT_ID} (skipping plugin)`);
|
|
110
119
|
return {};
|
|
@@ -115,8 +124,7 @@ export const OpenAIAuthPlugin = async ({ client }) => {
|
|
|
115
124
|
global: providerConfig?.options || {},
|
|
116
125
|
models: providerConfig?.models || {},
|
|
117
126
|
};
|
|
118
|
-
// Load plugin configuration
|
|
119
|
-
// Priority: CODEX_MODE env var > config file > default (true)
|
|
127
|
+
// Load plugin configuration
|
|
120
128
|
const pluginConfig = loadPluginConfig();
|
|
121
129
|
const codexMode = getCodexMode(pluginConfig);
|
|
122
130
|
const accountSelectionStrategy = pluginConfig.accountSelectionStrategy === "sticky" ? "sticky" : "round-robin";
|
|
@@ -130,61 +138,47 @@ export const OpenAIAuthPlugin = async ({ client }) => {
|
|
|
130
138
|
logWarn("Failed to persist account pool", error);
|
|
131
139
|
}
|
|
132
140
|
};
|
|
141
|
+
// Sync current auth into pool
|
|
133
142
|
accountPool.upsert({
|
|
134
143
|
accountId,
|
|
135
144
|
access: auth.access,
|
|
136
145
|
refresh: auth.refresh,
|
|
137
146
|
expires: auth.expires,
|
|
138
|
-
email: typeof
|
|
139
|
-
?
|
|
147
|
+
email: typeof auth.email === "string"
|
|
148
|
+
? auth.email
|
|
140
149
|
: undefined,
|
|
141
150
|
});
|
|
142
151
|
savePool();
|
|
143
|
-
//
|
|
152
|
+
// Start proactive background token refresh (#8)
|
|
153
|
+
const refreshQueue = new ProactiveRefreshQueue(accountPool);
|
|
154
|
+
refreshQueue.start();
|
|
144
155
|
return {
|
|
145
156
|
apiKey: DUMMY_API_KEY,
|
|
146
157
|
baseURL: CODEX_BASE_URL,
|
|
147
|
-
/**
|
|
148
|
-
* Custom fetch implementation for Codex API
|
|
149
|
-
*
|
|
150
|
-
* Handles:
|
|
151
|
-
* - Per-account token refresh when expired (inside retry loop)
|
|
152
|
-
* - URL rewriting for Codex backend
|
|
153
|
-
* - Request body transformation
|
|
154
|
-
* - OAuth header injection per selected account
|
|
155
|
-
* - Automatic 429 rotation across account pool
|
|
156
|
-
* - SSE to JSON conversion for non-tool requests
|
|
157
|
-
* - Error handling and logging
|
|
158
|
-
*
|
|
159
|
-
* @param input - Request URL or Request object
|
|
160
|
-
* @param init - Request options
|
|
161
|
-
* @returns Response from Codex API
|
|
162
|
-
*/
|
|
163
158
|
async fetch(input, init) {
|
|
164
159
|
const latestAuth = await getAuth();
|
|
165
|
-
|
|
160
|
+
const latestWithAccount = latestAuth;
|
|
166
161
|
if (latestAuth.type === "oauth") {
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
162
|
+
// Re-extract account ID with the priority chain (#5)
|
|
163
|
+
const latestAccountId = latestWithAccount.accountId ||
|
|
164
|
+
(latestWithAccount.id_token
|
|
165
|
+
? extractAccountIdFromToken(latestWithAccount.id_token)
|
|
166
|
+
: undefined) ||
|
|
167
|
+
extractAccountIdFromToken(latestAuth.access);
|
|
168
|
+
if (latestAccountId) {
|
|
169
|
+
accountId = latestAccountId;
|
|
170
170
|
accountPool.upsert({
|
|
171
|
-
accountId:
|
|
171
|
+
accountId: latestAccountId,
|
|
172
172
|
access: latestAuth.access,
|
|
173
173
|
refresh: latestAuth.refresh,
|
|
174
174
|
expires: latestAuth.expires,
|
|
175
|
-
email: typeof latestDecoded?.email === "string"
|
|
176
|
-
? latestDecoded.email
|
|
177
|
-
: undefined,
|
|
178
175
|
});
|
|
179
176
|
}
|
|
180
177
|
}
|
|
181
|
-
// Step 1: Extract and rewrite URL for Codex backend
|
|
178
|
+
// Step 1: Extract and rewrite URL for Codex backend (#7)
|
|
182
179
|
const originalUrl = extractRequestUrl(input);
|
|
183
180
|
const url = rewriteUrlForCodex(originalUrl);
|
|
184
|
-
// Step 2: Transform request body
|
|
185
|
-
// Instructions are fetched per model family (codex-max, codex, gpt-5.1)
|
|
186
|
-
// Capture original stream value before transformation
|
|
187
|
-
// generateText() sends no stream field, streamText() sends stream=true
|
|
181
|
+
// Step 2: Transform request body
|
|
188
182
|
let originalBody = {};
|
|
189
183
|
if (typeof init?.body === "string") {
|
|
190
184
|
try {
|
|
@@ -197,29 +191,32 @@ export const OpenAIAuthPlugin = async ({ client }) => {
|
|
|
197
191
|
const isStreaming = originalBody.stream === true;
|
|
198
192
|
const transformation = await transformRequestForCodex(init, url, userConfig, codexMode);
|
|
199
193
|
const requestInit = transformation?.updatedInit ?? init;
|
|
194
|
+
// Step 3: Retry loop — one attempt per account
|
|
200
195
|
const attempts = Math.max(accountPool.count(), 1);
|
|
201
196
|
let lastRateLimitResponse = null;
|
|
202
197
|
for (let i = 0; i < attempts; i++) {
|
|
203
198
|
const selected = accountPool.next(accountSelectionStrategy);
|
|
204
|
-
if (!selected)
|
|
199
|
+
if (!selected)
|
|
205
200
|
break;
|
|
206
|
-
|
|
201
|
+
// Per-account token refresh when expired
|
|
202
|
+
// (Background queue handles this proactively; this is the safety net)
|
|
207
203
|
if (selected.expires < Date.now()) {
|
|
208
204
|
const selectedRefreshBefore = selected.refresh;
|
|
209
|
-
const refreshed = await
|
|
205
|
+
const refreshed = await refreshAccessTokenShared(selected.accountId, selected.refresh);
|
|
210
206
|
if (refreshed.type === "failed") {
|
|
211
|
-
// Auth failure (revoked/invalid token)
|
|
212
|
-
// Calling markRateLimited here would retry the same dead
|
|
213
|
-
// token after cooldown, looping forever. Skip this account
|
|
214
|
-
// for the current request without penalizing it.
|
|
207
|
+
// Auth failure (revoked/invalid token) — track it (#9)
|
|
215
208
|
logWarn("Token refresh failed for account, skipping", selected.accountId);
|
|
209
|
+
accountPool.markAuthFailure(selected.accountId);
|
|
216
210
|
savePool();
|
|
217
211
|
continue;
|
|
218
212
|
}
|
|
213
|
+
// Clear failure counter on successful refresh
|
|
214
|
+
accountPool.clearAuthFailures(selected.accountId);
|
|
219
215
|
accountPool.replaceAuth(selected.accountId, refreshed.access, refreshed.refresh, refreshed.expires);
|
|
216
|
+
// Keep opencode's stored auth in sync for the primary account
|
|
220
217
|
if (latestAuth.type === "oauth" &&
|
|
221
218
|
(latestAuth.refresh === selectedRefreshBefore ||
|
|
222
|
-
|
|
219
|
+
accountId === selected.accountId)) {
|
|
223
220
|
try {
|
|
224
221
|
await client.auth.set({
|
|
225
222
|
path: { id: "openai" },
|
|
@@ -236,11 +233,13 @@ export const OpenAIAuthPlugin = async ({ client }) => {
|
|
|
236
233
|
}
|
|
237
234
|
}
|
|
238
235
|
}
|
|
236
|
+
// Step 4: Build headers
|
|
239
237
|
const headers = createCodexHeaders(requestInit, selected.accountId, selected.access, {
|
|
240
238
|
model: transformation?.body.model,
|
|
241
239
|
promptCacheKey: transformation?.body
|
|
242
240
|
?.prompt_cache_key,
|
|
243
241
|
});
|
|
242
|
+
// Step 5: Execute request
|
|
244
243
|
const response = await fetch(url, {
|
|
245
244
|
...requestInit,
|
|
246
245
|
headers,
|
|
@@ -254,10 +253,13 @@ export const OpenAIAuthPlugin = async ({ client }) => {
|
|
|
254
253
|
attempt: i + 1,
|
|
255
254
|
totalAttempts: attempts,
|
|
256
255
|
});
|
|
256
|
+
// Step 6: Handle response
|
|
257
257
|
if (!response.ok) {
|
|
258
258
|
const mapped = await handleErrorResponse(response);
|
|
259
259
|
if (mapped.status === 429) {
|
|
260
|
-
|
|
260
|
+
// Parse error code for tiered cooldown (#10)
|
|
261
|
+
const errorCode = await parseErrorCode(mapped);
|
|
262
|
+
accountPool.markRateLimited(selected.accountId, mapped.headers, rateLimitCooldownMs, errorCode);
|
|
261
263
|
savePool();
|
|
262
264
|
lastRateLimitResponse = mapped;
|
|
263
265
|
continue;
|
|
@@ -265,9 +267,42 @@ export const OpenAIAuthPlugin = async ({ client }) => {
|
|
|
265
267
|
savePool();
|
|
266
268
|
return mapped;
|
|
267
269
|
}
|
|
270
|
+
// Success — clear any failure state
|
|
271
|
+
accountPool.clearAuthFailures(selected.accountId);
|
|
268
272
|
savePool();
|
|
269
273
|
return await handleSuccessResponse(response, isStreaming);
|
|
270
274
|
}
|
|
275
|
+
// All accounts exhausted — wait for recovery if feasible (#11)
|
|
276
|
+
const minWaitMs = accountPool.getMinRetryAfterMs();
|
|
277
|
+
if (minWaitMs !== null && minWaitMs <= MAX_RECOVERY_WAIT_MS) {
|
|
278
|
+
logDebug(`All accounts rate-limited. Waiting ${Math.ceil(minWaitMs / 1000)}s for recovery...`);
|
|
279
|
+
await new Promise((r) => setTimeout(r, minWaitMs));
|
|
280
|
+
// One recovery attempt with the now-unblocked account
|
|
281
|
+
const recovered = accountPool.next(accountSelectionStrategy);
|
|
282
|
+
if (recovered) {
|
|
283
|
+
const recHeaders = createCodexHeaders(requestInit, recovered.accountId, recovered.access, {
|
|
284
|
+
model: transformation?.body.model,
|
|
285
|
+
promptCacheKey: transformation?.body
|
|
286
|
+
?.prompt_cache_key,
|
|
287
|
+
});
|
|
288
|
+
const recResponse = await fetch(url, { ...requestInit, headers: recHeaders });
|
|
289
|
+
if (recResponse.ok) {
|
|
290
|
+
accountPool.clearAuthFailures(recovered.accountId);
|
|
291
|
+
savePool();
|
|
292
|
+
return await handleSuccessResponse(recResponse, isStreaming);
|
|
293
|
+
}
|
|
294
|
+
const recMapped = await handleErrorResponse(recResponse);
|
|
295
|
+
if (recMapped.status === 429) {
|
|
296
|
+
const errorCode = await parseErrorCode(recMapped);
|
|
297
|
+
accountPool.markRateLimited(recovered.accountId, recMapped.headers, rateLimitCooldownMs, errorCode);
|
|
298
|
+
lastRateLimitResponse = recMapped;
|
|
299
|
+
}
|
|
300
|
+
else {
|
|
301
|
+
savePool();
|
|
302
|
+
return recMapped;
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
}
|
|
271
306
|
savePool();
|
|
272
307
|
if (lastRateLimitResponse) {
|
|
273
308
|
return lastRateLimitResponse;
|
|
@@ -277,27 +312,44 @@ export const OpenAIAuthPlugin = async ({ client }) => {
|
|
|
277
312
|
};
|
|
278
313
|
},
|
|
279
314
|
methods: [
|
|
315
|
+
// ── Account management (view / remove existing accounts) ───────────────
|
|
316
|
+
{
|
|
317
|
+
label: AUTH_LABELS.MANAGE_ACCOUNTS,
|
|
318
|
+
type: "oauth",
|
|
319
|
+
authorize: async () => {
|
|
320
|
+
const result = await showAccountManager();
|
|
321
|
+
// If user wants to add or refresh a token, tell them to pick
|
|
322
|
+
// an actual auth method from the list instead
|
|
323
|
+
if (result.action === "add" || result.action === "refresh-token") {
|
|
324
|
+
return {
|
|
325
|
+
url: "",
|
|
326
|
+
method: "code",
|
|
327
|
+
instructions: "Select one of the auth methods above (browser, manual, or headless) to add a new account.",
|
|
328
|
+
callback: async () => ({ type: "failed" }),
|
|
329
|
+
};
|
|
330
|
+
}
|
|
331
|
+
// User is done managing — nothing to store
|
|
332
|
+
return {
|
|
333
|
+
url: "",
|
|
334
|
+
method: "code",
|
|
335
|
+
instructions: "Done. No new account was added. Restart opencode.",
|
|
336
|
+
callback: async () => ({ type: "failed" }),
|
|
337
|
+
};
|
|
338
|
+
},
|
|
339
|
+
},
|
|
340
|
+
// ── Browser PKCE flow ──────────────────────────────────────────────────
|
|
280
341
|
{
|
|
281
342
|
label: AUTH_LABELS.OAUTH,
|
|
282
343
|
type: "oauth",
|
|
283
|
-
/**
|
|
284
|
-
* OAuth authorization flow
|
|
285
|
-
*
|
|
286
|
-
* Steps:
|
|
287
|
-
* 1. Generate PKCE challenge and state for security
|
|
288
|
-
* 2. Start local OAuth callback server on port 1455
|
|
289
|
-
* 3. Open browser to OpenAI authorization page
|
|
290
|
-
* 4. Wait for user to complete login
|
|
291
|
-
* 5. Exchange authorization code for tokens
|
|
292
|
-
*
|
|
293
|
-
* @returns Authorization flow configuration
|
|
294
|
-
*/
|
|
295
344
|
authorize: async () => {
|
|
296
345
|
const { pkce, state, url } = await createAuthorizationFlow();
|
|
297
346
|
const serverInfo = await startLocalOAuthServer({ state });
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
347
|
+
const browserOpened = openBrowserUrl(url);
|
|
348
|
+
// Fall back immediately to manual paste when:
|
|
349
|
+
// - local callback server could not bind (port conflict)
|
|
350
|
+
// - browser could not be launched (headless / no DISPLAY)
|
|
351
|
+
// This avoids a 60-second timeout before showing the user the URL.
|
|
352
|
+
if (!serverInfo.ready || !browserOpened) {
|
|
301
353
|
serverInfo.close();
|
|
302
354
|
return buildManualOAuthFlow(pkce, url);
|
|
303
355
|
}
|
|
@@ -308,17 +360,25 @@ export const OpenAIAuthPlugin = async ({ client }) => {
|
|
|
308
360
|
callback: async () => {
|
|
309
361
|
const result = await serverInfo.waitForCode(state);
|
|
310
362
|
serverInfo.close();
|
|
311
|
-
if (!result)
|
|
363
|
+
if (!result)
|
|
312
364
|
return { type: "failed" };
|
|
313
|
-
}
|
|
314
365
|
const tokens = await exchangeAuthorizationCode(result.code, pkce.verifier, REDIRECT_URI);
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
366
|
+
if (tokens?.type !== "success")
|
|
367
|
+
return { type: "failed" };
|
|
368
|
+
// Return accountId so opencode stores it in auth — avoids JWT
|
|
369
|
+
// decode on every request (#5)
|
|
370
|
+
return {
|
|
371
|
+
...tokens,
|
|
372
|
+
accountId: extractAccountId({
|
|
373
|
+
access_token: tokens.access,
|
|
374
|
+
id_token: tokens.id_token,
|
|
375
|
+
}),
|
|
376
|
+
};
|
|
318
377
|
},
|
|
319
378
|
};
|
|
320
379
|
},
|
|
321
380
|
},
|
|
381
|
+
// ── Manual URL paste ───────────────────────────────────────────────────
|
|
322
382
|
{
|
|
323
383
|
label: AUTH_LABELS.OAUTH_MANUAL,
|
|
324
384
|
type: "oauth",
|
|
@@ -327,12 +387,53 @@ export const OpenAIAuthPlugin = async ({ client }) => {
|
|
|
327
387
|
return buildManualOAuthFlow(pkce, url);
|
|
328
388
|
},
|
|
329
389
|
},
|
|
390
|
+
// ── Headless / device-code flow (#1) ──────────────────────────────────
|
|
391
|
+
{
|
|
392
|
+
label: AUTH_LABELS.OAUTH_DEVICE,
|
|
393
|
+
type: "oauth",
|
|
394
|
+
authorize: async () => {
|
|
395
|
+
const deviceFlow = await createDeviceAuthorizationFlow();
|
|
396
|
+
return {
|
|
397
|
+
url: deviceFlow.activateUrl,
|
|
398
|
+
method: "auto",
|
|
399
|
+
instructions: `${AUTH_LABELS.INSTRUCTIONS_DEVICE}\n\nCode: ${deviceFlow.userCode}\nURL: ${deviceFlow.activateUrl}`,
|
|
400
|
+
callback: async () => {
|
|
401
|
+
const tokens = await deviceFlow.poll();
|
|
402
|
+
if (tokens?.type !== "success")
|
|
403
|
+
return { type: "failed" };
|
|
404
|
+
return {
|
|
405
|
+
...tokens,
|
|
406
|
+
accountId: extractAccountId({
|
|
407
|
+
access_token: tokens.access,
|
|
408
|
+
id_token: tokens.id_token,
|
|
409
|
+
}),
|
|
410
|
+
};
|
|
411
|
+
},
|
|
412
|
+
};
|
|
413
|
+
},
|
|
414
|
+
},
|
|
415
|
+
// ── API Key ────────────────────────────────────────────────────────────
|
|
330
416
|
{
|
|
331
417
|
label: AUTH_LABELS.API_KEY,
|
|
332
418
|
type: "api",
|
|
333
419
|
},
|
|
334
420
|
],
|
|
335
421
|
},
|
|
422
|
+
/**
|
|
423
|
+
* chat.headers hook — injected before every LLM request (#2, #4, #6).
|
|
424
|
+
* Sets originator, User-Agent, and session_id using the platform session ID.
|
|
425
|
+
*/
|
|
426
|
+
"chat.headers": async (hookInput, output) => {
|
|
427
|
+
if (hookInput.model.providerID !== PROVIDER_ID)
|
|
428
|
+
return;
|
|
429
|
+
// #2: correct originator (not codex_cli_rs)
|
|
430
|
+
output.headers["originator"] = "opencode";
|
|
431
|
+
// #4: use the platform session ID (not a static random UUID)
|
|
432
|
+
output.headers["session_id"] = hookInput.sessionID;
|
|
433
|
+
// #6: proper User-Agent with version + OS info
|
|
434
|
+
output.headers["User-Agent"] =
|
|
435
|
+
`better-opencode-openai-codex-auth/${PLUGIN_VERSION} (${os.platform()} ${os.release()}; ${os.arch()})`;
|
|
436
|
+
},
|
|
336
437
|
};
|
|
337
438
|
};
|
|
338
439
|
export default OpenAIAuthPlugin;
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,10 +8,36 @@ export declare class AccountPool {
|
|
|
8
8
|
count(): number;
|
|
9
9
|
getAvailableCount(): number;
|
|
10
10
|
getMinRetryAfterMs(): number | null;
|
|
11
|
-
|
|
11
|
+
/**
|
|
12
|
+
* Mark an account as rate-limited.
|
|
13
|
+
* Applies tiered cooldown based on the ChatGPT error code (#10):
|
|
14
|
+
* - usage_limit_reached → 4 hours
|
|
15
|
+
* - usage_not_included → 24 hours
|
|
16
|
+
* - rate_limit_exceeded → 60 seconds
|
|
17
|
+
* - unknown / no code → retry-after header or configured default
|
|
18
|
+
*/
|
|
19
|
+
markRateLimited(accountId: string, headers: Headers, cooldownMs?: number, errorCode?: string): void;
|
|
20
|
+
/**
|
|
21
|
+
* Record an auth/token-refresh failure for an account (#9).
|
|
22
|
+
*
|
|
23
|
+
* Increments consecutiveFailures with a 2-hour TTL reset. After
|
|
24
|
+
* MAX_FAILURES consecutive failures the account is placed in cooldown
|
|
25
|
+
* for COOLDOWN_MS — during which it is skipped by next().
|
|
26
|
+
*/
|
|
27
|
+
markAuthFailure(accountId: string): void;
|
|
28
|
+
/**
|
|
29
|
+
* Clear the failure counter and cooldown for an account (called on success).
|
|
30
|
+
*/
|
|
31
|
+
clearAuthFailures(accountId: string): void;
|
|
12
32
|
next(strategy: "sticky" | "round-robin"): AccountPoolEntry | null;
|
|
13
33
|
replaceAuth(accountId: string, access: string, refresh: string, expires: number): void;
|
|
14
|
-
|
|
15
|
-
|
|
34
|
+
/** Returns all accounts (for use by ProactiveRefreshQueue) */
|
|
35
|
+
getAccounts(): AccountPoolEntry[];
|
|
36
|
+
/** True if account is rate-limited OR in auth-failure cooldown */
|
|
37
|
+
private isUnavailable;
|
|
38
|
+
private isRateLimited;
|
|
39
|
+
private isCoolingDown;
|
|
40
|
+
/** Clear expired rate-limit and cooldown timestamps */
|
|
41
|
+
private clearExpiredStates;
|
|
16
42
|
}
|
|
17
43
|
//# sourceMappingURL=account-pool.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"account-pool.d.ts","sourceRoot":"","sources":["../../lib/account-pool.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gBAAgB,EAAsB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"account-pool.d.ts","sourceRoot":"","sources":["../../lib/account-pool.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gBAAgB,EAAsB,MAAM,YAAY,CAAC;AAqMvE,qBAAa,WAAW;IACvB,OAAO,CAAC,QAAQ,CAA0B;IAC1C,OAAO,CAAC,WAAW,CAAK;IAExB,MAAM,CAAC,IAAI,IAAI,WAAW;IAgB1B,IAAI,IAAI,IAAI;IAgDZ,MAAM,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI;IAoBrC,KAAK,IAAI,MAAM;IAIf,iBAAiB,IAAI,MAAM;IAS3B,kBAAkB,IAAI,MAAM,GAAG,IAAI;IAqBnC;;;;;;;OAOG;IACH,eAAe,CACd,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,OAAO,EAChB,UAAU,CAAC,EAAE,MAAM,EACnB,SAAS,CAAC,EAAE,MAAM,GAChB,IAAI;IAOP;;;;;;OAMG;IACH,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAmBxC;;OAEG;IACH,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAQ1C,IAAI,CAAC,QAAQ,EAAE,QAAQ,GAAG,aAAa,GAAG,gBAAgB,GAAG,IAAI;IAuBjE,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAQtF,8DAA8D;IAC9D,WAAW,IAAI,gBAAgB,EAAE;IAIjC,kEAAkE;IAClE,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,aAAa;IAIrB,uDAAuD;IACvD,OAAO,CAAC,kBAAkB;CAW1B"}
|