better-opencode-openai-codex-auth 0.1.2 → 0.1.3
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/config/README.md +19 -93
- package/config/opencode-modern.json +149 -42
- 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 +7 -27
- package/config/opencode-legacy.json +0 -571
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Proactive Token Refresh Queue (#8)
|
|
3
|
+
*
|
|
4
|
+
* Runs as a background timer and refreshes OAuth tokens that are approaching
|
|
5
|
+
* expiry. This ensures user requests are never blocked by an in-flight token
|
|
6
|
+
* refresh — the pool always has fresh credentials ready.
|
|
7
|
+
*
|
|
8
|
+
* Adapted from the LLM-API-Key-Proxy pattern used in
|
|
9
|
+
* NoeFabris/opencode-antigravity-auth, stripped of Google-specific logic.
|
|
10
|
+
*
|
|
11
|
+
* Key properties:
|
|
12
|
+
* - Non-blocking: runs independently of the request path
|
|
13
|
+
* - Serialized: only one refresh pass runs at a time (no concurrent storms)
|
|
14
|
+
* - Per-account: skips expired or already-up-to-date tokens
|
|
15
|
+
* - Configurable: buffer window and check interval are tunable
|
|
16
|
+
*/
|
|
17
|
+
import { refreshAccessTokenShared } from "./auth/auth.js";
|
|
18
|
+
import { logDebug, logWarn } from "./logger.js";
|
|
19
|
+
export const DEFAULT_PROACTIVE_REFRESH_CONFIG = {
|
|
20
|
+
enabled: true,
|
|
21
|
+
bufferSeconds: 1800, // 30 minutes before expiry
|
|
22
|
+
checkIntervalSeconds: 300, // check every 5 minutes
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Proactive Token Refresh Queue.
|
|
26
|
+
*
|
|
27
|
+
* Usage:
|
|
28
|
+
* const queue = new ProactiveRefreshQueue(accountPool);
|
|
29
|
+
* queue.start();
|
|
30
|
+
* // ... plugin runs ...
|
|
31
|
+
* queue.stop(); // optional, on process exit
|
|
32
|
+
*/
|
|
33
|
+
export class ProactiveRefreshQueue {
|
|
34
|
+
config;
|
|
35
|
+
pool;
|
|
36
|
+
isRunning = false;
|
|
37
|
+
isRefreshing = false;
|
|
38
|
+
intervalHandle = null;
|
|
39
|
+
constructor(pool, config) {
|
|
40
|
+
this.pool = pool;
|
|
41
|
+
this.config = { ...DEFAULT_PROACTIVE_REFRESH_CONFIG, ...config };
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Start the background refresh loop.
|
|
45
|
+
* An initial check runs 5 s after start (letting things settle).
|
|
46
|
+
*/
|
|
47
|
+
start() {
|
|
48
|
+
if (this.isRunning || !this.config.enabled)
|
|
49
|
+
return;
|
|
50
|
+
this.isRunning = true;
|
|
51
|
+
// Initial check after a short settling delay
|
|
52
|
+
setTimeout(() => {
|
|
53
|
+
if (this.isRunning) {
|
|
54
|
+
this.runRefreshCheck().catch((err) => {
|
|
55
|
+
logWarn("ProactiveRefreshQueue: initial check failed", err);
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
}, 5_000);
|
|
59
|
+
// Periodic checks
|
|
60
|
+
const intervalMs = this.config.checkIntervalSeconds * 1000;
|
|
61
|
+
this.intervalHandle = setInterval(() => {
|
|
62
|
+
this.runRefreshCheck().catch((err) => {
|
|
63
|
+
logWarn("ProactiveRefreshQueue: periodic check failed", err);
|
|
64
|
+
});
|
|
65
|
+
}, intervalMs);
|
|
66
|
+
logDebug("ProactiveRefreshQueue started", {
|
|
67
|
+
checkIntervalSeconds: this.config.checkIntervalSeconds,
|
|
68
|
+
bufferSeconds: this.config.bufferSeconds,
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
stop() {
|
|
72
|
+
if (!this.isRunning)
|
|
73
|
+
return;
|
|
74
|
+
this.isRunning = false;
|
|
75
|
+
if (this.intervalHandle) {
|
|
76
|
+
clearInterval(this.intervalHandle);
|
|
77
|
+
this.intervalHandle = null;
|
|
78
|
+
}
|
|
79
|
+
logDebug("ProactiveRefreshQueue stopped");
|
|
80
|
+
}
|
|
81
|
+
/** Whether the queue is currently running */
|
|
82
|
+
get running() {
|
|
83
|
+
return this.isRunning;
|
|
84
|
+
}
|
|
85
|
+
// ---------------------------------------------------------------------------
|
|
86
|
+
needsRefresh(account) {
|
|
87
|
+
if (!account.expires)
|
|
88
|
+
return false;
|
|
89
|
+
const bufferMs = this.config.bufferSeconds * 1000;
|
|
90
|
+
return account.expires <= Date.now() + bufferMs;
|
|
91
|
+
}
|
|
92
|
+
isAlreadyExpired(account) {
|
|
93
|
+
if (!account.expires)
|
|
94
|
+
return false;
|
|
95
|
+
return account.expires <= Date.now();
|
|
96
|
+
}
|
|
97
|
+
async runRefreshCheck() {
|
|
98
|
+
if (this.isRefreshing)
|
|
99
|
+
return; // previous pass still running
|
|
100
|
+
this.isRefreshing = true;
|
|
101
|
+
try {
|
|
102
|
+
const accounts = this.pool.getAccounts().filter((a) => {
|
|
103
|
+
// Skip accounts that are already expired — let the main fetch loop handle those
|
|
104
|
+
if (this.isAlreadyExpired(a))
|
|
105
|
+
return false;
|
|
106
|
+
return this.needsRefresh(a);
|
|
107
|
+
});
|
|
108
|
+
if (accounts.length === 0)
|
|
109
|
+
return;
|
|
110
|
+
logDebug(`ProactiveRefreshQueue: refreshing ${accounts.length} account(s)`);
|
|
111
|
+
// Refresh serially — prevents concurrent refresh storms
|
|
112
|
+
for (const account of accounts) {
|
|
113
|
+
if (!this.isRunning)
|
|
114
|
+
break; // stopped mid-pass
|
|
115
|
+
try {
|
|
116
|
+
const result = await refreshAccessTokenShared(account.accountId, account.refresh);
|
|
117
|
+
if (result.type === "success") {
|
|
118
|
+
this.pool.replaceAuth(account.accountId, result.access, result.refresh, result.expires);
|
|
119
|
+
try {
|
|
120
|
+
this.pool.save();
|
|
121
|
+
}
|
|
122
|
+
catch {
|
|
123
|
+
// Non-fatal — token is already updated in memory
|
|
124
|
+
}
|
|
125
|
+
logDebug("ProactiveRefreshQueue: refreshed account", {
|
|
126
|
+
accountId: account.accountId,
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
logWarn("ProactiveRefreshQueue: refresh failed for account", {
|
|
131
|
+
accountId: account.accountId,
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
catch (err) {
|
|
136
|
+
logWarn("ProactiveRefreshQueue: unexpected error refreshing account", {
|
|
137
|
+
accountId: account.accountId,
|
|
138
|
+
error: err instanceof Error ? err.message : String(err),
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
finally {
|
|
144
|
+
this.isRefreshing = false;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=refresh-queue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refresh-queue.js","sourceRoot":"","sources":["../../lib/refresh-queue.ts"],"names":[],"mappings":"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"}
|
|
@@ -25,7 +25,8 @@ export declare function refreshAndUpdateToken(currentAuth: Auth, client: Opencod
|
|
|
25
25
|
*/
|
|
26
26
|
export declare function extractRequestUrl(input: Request | string | URL): string;
|
|
27
27
|
/**
|
|
28
|
-
* Rewrites OpenAI API URLs to Codex backend URLs
|
|
28
|
+
* Rewrites OpenAI API URLs to Codex backend URLs.
|
|
29
|
+
* Handles both the Responses API path and the Chat Completions compat path (#7).
|
|
29
30
|
* @param url - Original URL
|
|
30
31
|
* @returns Rewritten URL for Codex backend
|
|
31
32
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch-helpers.d.ts","sourceRoot":"","sources":["../../../lib/request/fetch-helpers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAMvD,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAY3D;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAEtD;AAED;;;;;GAKG;AACH,wBAAsB,qBAAqB,CAC1C,WAAW,EAAE,IAAI,EACjB,MAAM,EAAE,cAAc,GACpB,OAAO,CAAC,IAAI,CAAC,CA2Bf;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,GAAG,GAAG,MAAM,CAIvE;AAED
|
|
1
|
+
{"version":3,"file":"fetch-helpers.d.ts","sourceRoot":"","sources":["../../../lib/request/fetch-helpers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAMvD,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAY3D;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAEtD;AAED;;;;;GAKG;AACH,wBAAsB,qBAAqB,CAC1C,WAAW,EAAE,IAAI,EACjB,MAAM,EAAE,cAAc,GACpB,OAAO,CAAC,IAAI,CAAC,CA2Bf;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,GAAG,GAAG,MAAM,CAIvE;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAiBtD;AAED;;;;;;;;;GASG;AACH,wBAAsB,wBAAwB,CAC7C,IAAI,EAAE,WAAW,GAAG,SAAS,EAC7B,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,UAAU,EACtB,SAAS,UAAO,GACd,OAAO,CAAC;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,WAAW,EAAE,WAAW,CAAA;CAAE,GAAG,SAAS,CAAC,CA0DtE;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAC9B,IAAI,EAAE,WAAW,GAAG,SAAS,EAC7B,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,IAAI,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAA;CAAE,GACnD,OAAO,CAqBT;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CACrC,QAAQ,EAAE,QAAQ,GACnB,OAAO,CAAC,QAAQ,CAAC,CAUnB;AAED;;;;;;;GAOG;AACH,wBAAsB,qBAAqB,CACvC,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,OAAO,GACrB,OAAO,CAAC,QAAQ,CAAC,CAcnB"}
|
|
@@ -59,12 +59,29 @@ export function extractRequestUrl(input) {
|
|
|
59
59
|
return input.url;
|
|
60
60
|
}
|
|
61
61
|
/**
|
|
62
|
-
* Rewrites OpenAI API URLs to Codex backend URLs
|
|
62
|
+
* Rewrites OpenAI API URLs to Codex backend URLs.
|
|
63
|
+
* Handles both the Responses API path and the Chat Completions compat path (#7).
|
|
63
64
|
* @param url - Original URL
|
|
64
65
|
* @returns Rewritten URL for Codex backend
|
|
65
66
|
*/
|
|
66
67
|
export function rewriteUrlForCodex(url) {
|
|
67
|
-
|
|
68
|
+
// /v1/responses or /responses → /codex/responses
|
|
69
|
+
if (url.includes(URL_PATHS.RESPONSES)) {
|
|
70
|
+
return url.replace(URL_PATHS.RESPONSES, URL_PATHS.CODEX_RESPONSES);
|
|
71
|
+
}
|
|
72
|
+
// /chat/completions (Chat Completions compat layer) → codex endpoint
|
|
73
|
+
if (url.includes(URL_PATHS.CHAT_COMPLETIONS)) {
|
|
74
|
+
try {
|
|
75
|
+
const parsed = new URL(url);
|
|
76
|
+
parsed.pathname = URL_PATHS.CODEX_RESPONSES;
|
|
77
|
+
return parsed.toString();
|
|
78
|
+
}
|
|
79
|
+
catch {
|
|
80
|
+
// Fallback for relative paths
|
|
81
|
+
return url.replace(URL_PATHS.CHAT_COMPLETIONS, URL_PATHS.CODEX_RESPONSES);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return url;
|
|
68
85
|
}
|
|
69
86
|
/**
|
|
70
87
|
* Transforms request body and logs the transformation
|
|
@@ -141,12 +158,15 @@ export function createCodexHeaders(init, accountId, accessToken, opts) {
|
|
|
141
158
|
headers.set(OPENAI_HEADERS.ORIGINATOR, OPENAI_HEADER_VALUES.ORIGINATOR_CODEX);
|
|
142
159
|
const cacheKey = opts?.promptCacheKey;
|
|
143
160
|
if (cacheKey) {
|
|
161
|
+
// Use prompt_cache_key for both conversation and session tracking
|
|
144
162
|
headers.set(OPENAI_HEADERS.CONVERSATION_ID, cacheKey);
|
|
145
163
|
headers.set(OPENAI_HEADERS.SESSION_ID, cacheKey);
|
|
146
164
|
}
|
|
147
165
|
else {
|
|
166
|
+
// No explicit cache key — remove conversation_id but preserve session_id
|
|
167
|
+
// if it was already injected by the chat.headers hook (#4: platform session ID)
|
|
148
168
|
headers.delete(OPENAI_HEADERS.CONVERSATION_ID);
|
|
149
|
-
|
|
169
|
+
// session_id is left as-is (may have been set to input.sessionID by chat.headers hook)
|
|
150
170
|
}
|
|
151
171
|
headers.set("accept", "text/event-stream");
|
|
152
172
|
return headers;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch-helpers.js","sourceRoot":"","sources":["../../../lib/request/fetch-helpers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAChF,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE5E,OAAO,EACN,WAAW,EACX,WAAW,EACX,cAAc,EACd,oBAAoB,EACpB,SAAS,EACT,cAAc,EACd,UAAU,EACV,mBAAmB,GACnB,MAAM,iBAAiB,CAAC;AAEzB;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAU;IAC5C,OAAO,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAC3E,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAC1C,WAAiB,EACjB,MAAsB;IAEtB,MAAM,YAAY,GAAG,WAAW,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7E,MAAM,aAAa,GAAG,MAAM,kBAAkB,CAAC,YAAY,CAAC,CAAC;IAE7D,IAAI,aAAa,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,oBAAoB,CAAC,CAAC;IACtD,CAAC;IAED,4BAA4B;IAC5B,MAAM,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;QACrB,IAAI,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE;QACtB,IAAI,EAAE;YACL,IAAI,EAAE,OAAO;YACb,MAAM,EAAE,aAAa,CAAC,MAAM;YAC5B,OAAO,EAAE,aAAa,CAAC,OAAO;YAC9B,OAAO,EAAE,aAAa,CAAC,OAAO;SAC9B;KACD,CAAC,CAAC;IAEH,mDAAmD;IACnD,IAAI,WAAW,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAClC,WAAW,CAAC,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC;QAC1C,WAAW,CAAC,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC;QAC5C,WAAW,CAAC,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC;IAC7C,CAAC;IAED,OAAO,WAAW,CAAC;AACpB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAA6B;IAC9D,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5C,IAAI,KAAK,YAAY,GAAG;QAAE,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;IAClD,OAAO,KAAK,CAAC,GAAG,CAAC;AAClB,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"fetch-helpers.js","sourceRoot":"","sources":["../../../lib/request/fetch-helpers.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/types.d.ts
CHANGED
|
@@ -19,9 +19,15 @@ export interface AccountPoolEntry {
|
|
|
19
19
|
email?: string;
|
|
20
20
|
lastUsed?: number;
|
|
21
21
|
rateLimitedUntil?: number;
|
|
22
|
+
/** Timestamp until which this account is cooling down after consecutive auth failures */
|
|
23
|
+
coolingDownUntil?: number;
|
|
24
|
+
/** Number of consecutive auth/token-refresh failures (resets after FAILURE_RESET_MS) */
|
|
25
|
+
consecutiveFailures?: number;
|
|
26
|
+
/** Timestamp of the most recent failure, used for TTL-based counter reset */
|
|
27
|
+
lastFailureAt?: number;
|
|
22
28
|
}
|
|
23
29
|
export interface AccountPoolStorage {
|
|
24
|
-
version:
|
|
30
|
+
version: 2;
|
|
25
31
|
activeIndex: number;
|
|
26
32
|
accounts: AccountPoolEntry[];
|
|
27
33
|
}
|
|
@@ -90,6 +96,8 @@ export interface TokenSuccess {
|
|
|
90
96
|
access: string;
|
|
91
97
|
refresh: string;
|
|
92
98
|
expires: number;
|
|
99
|
+
/** id_token JWT returned by OpenAI — contains chatgpt_account_id as a dedicated claim */
|
|
100
|
+
id_token?: string;
|
|
93
101
|
}
|
|
94
102
|
/**
|
|
95
103
|
* Token exchange failure result
|
|
@@ -109,12 +117,20 @@ export interface ParsedAuthInput {
|
|
|
109
117
|
state?: string;
|
|
110
118
|
}
|
|
111
119
|
/**
|
|
112
|
-
* JWT payload with ChatGPT account info
|
|
120
|
+
* JWT payload with ChatGPT account info.
|
|
121
|
+
* The account ID may be present at the root OR nested under the openai auth claim.
|
|
113
122
|
*/
|
|
114
123
|
export interface JWTPayload {
|
|
124
|
+
/** Direct account ID claim (first-party opencode uses this as primary lookup) */
|
|
125
|
+
chatgpt_account_id?: string;
|
|
126
|
+
/** Nested claim used by some token variants */
|
|
115
127
|
"https://api.openai.com/auth"?: {
|
|
116
128
|
chatgpt_account_id?: string;
|
|
117
129
|
};
|
|
130
|
+
/** Org-based fallback when chatgpt_account_id is absent */
|
|
131
|
+
organizations?: Array<{
|
|
132
|
+
id: string;
|
|
133
|
+
}>;
|
|
118
134
|
[key: string]: unknown;
|
|
119
135
|
}
|
|
120
136
|
/**
|
package/dist/lib/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../lib/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAE9D;;GAEG;AACH,MAAM,WAAW,YAAY;IAC5B;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,wBAAwB,CAAC,EAAE,QAAQ,GAAG,aAAa,CAAC;IACpD,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,gBAAgB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../lib/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAE9D;;GAEG;AACH,MAAM,WAAW,YAAY;IAC5B;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,wBAAwB,CAAC,EAAE,QAAQ,GAAG,aAAa,CAAC;IACpD,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,gBAAgB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,yFAAyF;IACzF,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,wFAAwF;IACxF,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,6EAA6E;IAC7E,aAAa,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,kBAAkB;IAClC,OAAO,EAAE,CAAC,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,gBAAgB,EAAE,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IAC1B,MAAM,EAAE,aAAa,CAAC;IACtB,MAAM,EAAE;QACP,CAAC,SAAS,EAAE,MAAM,GAAG;YACpB,OAAO,CAAC,EAAE,aAAa,CAAC;YACxB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,aAAa,GAAG;gBAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;aAAE,CAAC,GAAG,SAAS,CAAC,CAAC;YAChF,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;SACvB,CAAC;KACF,CAAC;CACF;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC7B,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;IAC3E,gBAAgB,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,UAAU,GAAG,KAAK,GAAG,IAAI,CAAC;IAClE,aAAa,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC1C,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC/B,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;IACjE,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,UAAU,GAAG,KAAK,GAAG,IAAI,CAAC;CACxD;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC;CACjE;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IACjC,IAAI,EAAE,QAAQ,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACZ;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC5B,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,yFAAyF;IACzF,QAAQ,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC5B,IAAI,EAAE,QAAQ,CAAC;CACf;AAED;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,YAAY,GAAG,YAAY,CAAC;AAEtD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;GAGG;AACH,MAAM,WAAW,UAAU;IAC1B,iFAAiF;IACjF,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,+CAA+C;IAC/C,6BAA6B,CAAC,EAAE;QAC/B,kBAAkB,CAAC,EAAE,MAAM,CAAC;KAC5B,CAAC;IACF,2DAA2D;IAC3D,aAAa,CAAC,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACtC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACzB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,SAAS,EAAE,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;IACrC,IAAI,CAAC,EAAE;QACN,SAAS,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;KACtC,CAAC;IACF,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,eAAe,CAAC,EAAE;QACjB,MAAM,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG;YAAE,KAAK,CAAC,EAAE,OAAO,CAAC;YAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;SAAE,CAAC;QAC1E,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACvB,CAAC;IACF,iEAAiE;IACjE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC7B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;CACZ;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACvB;AAGD,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "better-opencode-openai-codex-auth",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.3",
|
|
4
4
|
"description": "OpenAI ChatGPT (Codex backend) OAuth auth plugin for opencode - use your ChatGPT Plus/Pro subscription instead of API credits",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -64,7 +64,6 @@
|
|
|
64
64
|
},
|
|
65
65
|
"dependencies": {
|
|
66
66
|
"@openauthjs/openauth": "^0.4.3",
|
|
67
|
-
"hono": "^4.12.7",
|
|
68
67
|
"jsonc-parser": "^3.3.1",
|
|
69
68
|
"zod": "^4.3.6"
|
|
70
69
|
},
|
|
@@ -11,15 +11,12 @@ const PLUGIN_NAME = "better-opencode-openai-codex-auth";
|
|
|
11
11
|
const args = new Set(process.argv.slice(2));
|
|
12
12
|
|
|
13
13
|
if (args.has("--help") || args.has("-h")) {
|
|
14
|
-
console.log(`Usage: ${PLUGIN_NAME} [--
|
|
14
|
+
console.log(`Usage: ${PLUGIN_NAME} [--uninstall] [--all] [--dry-run] [--no-cache-clear]\n\n` +
|
|
15
15
|
"Default behavior:\n" +
|
|
16
|
-
" - Installs/updates global config at ~/.config/opencode/opencode.jsonc
|
|
17
|
-
" - Uses modern config (variants) by default\n" +
|
|
16
|
+
" - Installs/updates global config at ~/.config/opencode/opencode.jsonc\n" +
|
|
18
17
|
" - Ensures plugin is unpinned (latest)\n" +
|
|
19
18
|
" - Clears OpenCode plugin cache\n\n" +
|
|
20
19
|
"Options:\n" +
|
|
21
|
-
" --modern Force modern config (default)\n" +
|
|
22
|
-
" --legacy Use legacy config (older OpenCode versions)\n" +
|
|
23
20
|
" --uninstall Remove plugin + OpenAI config entries from global config\n" +
|
|
24
21
|
" --all With --uninstall, also remove tokens, logs, and cached instructions\n" +
|
|
25
22
|
" --dry-run Show actions without writing\n" +
|
|
@@ -28,8 +25,6 @@ if (args.has("--help") || args.has("-h")) {
|
|
|
28
25
|
process.exit(0);
|
|
29
26
|
}
|
|
30
27
|
|
|
31
|
-
const useLegacy = args.has("--legacy");
|
|
32
|
-
const useModern = args.has("--modern") || !useLegacy;
|
|
33
28
|
const uninstallRequested = args.has("--uninstall") || args.has("--all");
|
|
34
29
|
const uninstallAll = args.has("--all");
|
|
35
30
|
const dryRun = args.has("--dry-run");
|
|
@@ -37,11 +32,7 @@ const skipCacheClear = args.has("--no-cache-clear");
|
|
|
37
32
|
|
|
38
33
|
const scriptDir = dirname(fileURLToPath(import.meta.url));
|
|
39
34
|
const repoRoot = resolve(scriptDir, "..");
|
|
40
|
-
const templatePath = join(
|
|
41
|
-
repoRoot,
|
|
42
|
-
"config",
|
|
43
|
-
useLegacy ? "opencode-legacy.json" : "opencode-modern.json"
|
|
44
|
-
);
|
|
35
|
+
const templatePath = join(repoRoot, "config", "opencode-modern.json");
|
|
45
36
|
|
|
46
37
|
const configDir = join(homedir(), ".config", "opencode");
|
|
47
38
|
const configPathJson = join(configDir, "opencode.json");
|
|
@@ -117,19 +108,10 @@ function mergeOpenAIConfig(existingOpenAI, templateOpenAI) {
|
|
|
117
108
|
}
|
|
118
109
|
|
|
119
110
|
async function getKnownModelIds() {
|
|
120
|
-
const legacyTemplate = await readJson(
|
|
121
|
-
join(repoRoot, "config", "opencode-legacy.json"),
|
|
122
|
-
);
|
|
123
111
|
const modernTemplate = await readJson(
|
|
124
112
|
join(repoRoot, "config", "opencode-modern.json"),
|
|
125
113
|
);
|
|
126
|
-
|
|
127
|
-
legacyTemplate?.provider?.openai?.models || {},
|
|
128
|
-
);
|
|
129
|
-
const modernModels = Object.keys(
|
|
130
|
-
modernTemplate?.provider?.openai?.models || {},
|
|
131
|
-
);
|
|
132
|
-
return new Set([...legacyModels, ...modernModels]);
|
|
114
|
+
return new Set(Object.keys(modernTemplate?.provider?.openai?.models || {}));
|
|
133
115
|
}
|
|
134
116
|
|
|
135
117
|
function formatJson(obj) {
|
|
@@ -407,7 +389,7 @@ async function main() {
|
|
|
407
389
|
}
|
|
408
390
|
|
|
409
391
|
if (dryRun) {
|
|
410
|
-
log(`[dry-run] Would write ${configPath}
|
|
392
|
+
log(`[dry-run] Would write ${configPath}`);
|
|
411
393
|
} else {
|
|
412
394
|
await mkdir(configDir, { recursive: true });
|
|
413
395
|
if (nextContent && configExists) {
|
|
@@ -415,16 +397,14 @@ async function main() {
|
|
|
415
397
|
} else {
|
|
416
398
|
await writeFile(configPath, formatJson(nextConfig), "utf-8");
|
|
417
399
|
}
|
|
418
|
-
log(`Wrote ${configPath}
|
|
400
|
+
log(`Wrote ${configPath}`);
|
|
419
401
|
}
|
|
420
402
|
|
|
421
403
|
await clearCache();
|
|
422
404
|
|
|
423
405
|
log("\nDone. Restart OpenCode to (re)install the plugin.");
|
|
424
406
|
log("Example: opencode");
|
|
425
|
-
|
|
426
|
-
log("Note: Legacy config requires OpenCode v1.0.209 or older.");
|
|
427
|
-
}
|
|
407
|
+
|
|
428
408
|
}
|
|
429
409
|
|
|
430
410
|
main().catch((error) => {
|