@longrun-ai/codex-auth 0.1.0

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.
Files changed (78) hide show
  1. package/LICENSE +157 -0
  2. package/README.md +148 -0
  3. package/dist/auth/manager.d.ts +32 -0
  4. package/dist/auth/manager.d.ts.map +1 -0
  5. package/dist/auth/manager.js +206 -0
  6. package/dist/auth/manager.js.map +1 -0
  7. package/dist/auth/schema.d.ts +41 -0
  8. package/dist/auth/schema.d.ts.map +1 -0
  9. package/dist/auth/schema.js +9 -0
  10. package/dist/auth/schema.js.map +1 -0
  11. package/dist/auth/storage.d.ts +13 -0
  12. package/dist/auth/storage.d.ts.map +1 -0
  13. package/dist/auth/storage.js +92 -0
  14. package/dist/auth/storage.js.map +1 -0
  15. package/dist/bin/auth-doctor.d.ts +3 -0
  16. package/dist/bin/auth-doctor.d.ts.map +1 -0
  17. package/dist/bin/auth-doctor.js +507 -0
  18. package/dist/bin/auth-doctor.js.map +1 -0
  19. package/dist/index.d.ts +12 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +12 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/llm/chatgpt.d.ts +355 -0
  24. package/dist/llm/chatgpt.d.ts.map +1 -0
  25. package/dist/llm/chatgpt.js +351 -0
  26. package/dist/llm/chatgpt.js.map +1 -0
  27. package/dist/oauth/browserLogin.d.ts +25 -0
  28. package/dist/oauth/browserLogin.d.ts.map +1 -0
  29. package/dist/oauth/browserLogin.js +231 -0
  30. package/dist/oauth/browserLogin.js.map +1 -0
  31. package/dist/oauth/deviceCode.d.ts +21 -0
  32. package/dist/oauth/deviceCode.d.ts.map +1 -0
  33. package/dist/oauth/deviceCode.js +103 -0
  34. package/dist/oauth/deviceCode.js.map +1 -0
  35. package/dist/oauth/pkce.d.ts +7 -0
  36. package/dist/oauth/pkce.d.ts.map +1 -0
  37. package/dist/oauth/pkce.js +14 -0
  38. package/dist/oauth/pkce.js.map +1 -0
  39. package/dist/oauth/refresh.d.ts +14 -0
  40. package/dist/oauth/refresh.d.ts.map +1 -0
  41. package/dist/oauth/refresh.js +122 -0
  42. package/dist/oauth/refresh.js.map +1 -0
  43. package/dist/oauth/tokenExchange.d.ts +7 -0
  44. package/dist/oauth/tokenExchange.d.ts.map +1 -0
  45. package/dist/oauth/tokenExchange.js +50 -0
  46. package/dist/oauth/tokenExchange.js.map +1 -0
  47. package/dist/oauth/tokenParsing.d.ts +4 -0
  48. package/dist/oauth/tokenParsing.d.ts.map +1 -0
  49. package/dist/oauth/tokenParsing.js +22 -0
  50. package/dist/oauth/tokenParsing.js.map +1 -0
  51. package/dist/prompts.d.ts +4 -0
  52. package/dist/prompts.d.ts.map +1 -0
  53. package/dist/prompts.js +85 -0
  54. package/dist/prompts.js.map +1 -0
  55. package/dist/utils/base64.d.ts +3 -0
  56. package/dist/utils/base64.d.ts.map +1 -0
  57. package/dist/utils/base64.js +16 -0
  58. package/dist/utils/base64.js.map +1 -0
  59. package/dist/utils/jwt.d.ts +6 -0
  60. package/dist/utils/jwt.d.ts.map +1 -0
  61. package/dist/utils/jwt.js +40 -0
  62. package/dist/utils/jwt.js.map +1 -0
  63. package/dist/utils/openBrowser.d.ts +2 -0
  64. package/dist/utils/openBrowser.d.ts.map +1 -0
  65. package/dist/utils/openBrowser.js +30 -0
  66. package/dist/utils/openBrowser.js.map +1 -0
  67. package/dist/utils/time.d.ts +2 -0
  68. package/dist/utils/time.d.ts.map +1 -0
  69. package/dist/utils/time.js +4 -0
  70. package/dist/utils/time.js.map +1 -0
  71. package/package.json +48 -0
  72. package/prompts/gpt-5.1-codex-max_prompt.md +117 -0
  73. package/prompts/gpt-5.2-codex_prompt.md +117 -0
  74. package/prompts/gpt_5_1_prompt.md +368 -0
  75. package/prompts/gpt_5_2_prompt.md +335 -0
  76. package/prompts/gpt_5_codex_prompt.md +105 -0
  77. package/prompts/prompt.md +310 -0
  78. package/prompts/prompt_with_apply_patch_instructions.md +386 -0
@@ -0,0 +1,351 @@
1
+ import { readFileSync } from 'node:fs';
2
+ import os from 'node:os';
3
+ import path from 'node:path';
4
+ import { Headers, ProxyAgent, fetch } from 'undici';
5
+ import { CODEX_INTERNAL_ORIGINATOR_OVERRIDE_ENV_VAR, DEFAULT_CHATGPT_BASE_URL, DEFAULT_ORIGINATOR, } from '../auth/schema.js';
6
+ import { resolveCodexHome } from '../auth/storage.js';
7
+ export function createChatGptStartRequest(options) {
8
+ return buildChatGptRequest(options, [buildUserMessage(options)]);
9
+ }
10
+ export function createChatGptContinuationRequest(options) {
11
+ const nextInput = buildUserMessage(options);
12
+ return buildChatGptRequest(options, [...options.history, nextInput]);
13
+ }
14
+ function hasUserText(options) {
15
+ return 'userText' in options;
16
+ }
17
+ function buildUserMessage(options) {
18
+ const content = hasUserText(options)
19
+ ? [{ type: 'input_text', text: options.userText }]
20
+ : options.userContent;
21
+ return {
22
+ type: 'message',
23
+ role: 'user',
24
+ content,
25
+ };
26
+ }
27
+ function buildChatGptRequest(options, input) {
28
+ return {
29
+ model: options.model,
30
+ instructions: options.instructions,
31
+ input,
32
+ tools: options.tools ?? [],
33
+ tool_choice: 'auto',
34
+ parallel_tool_calls: options.parallel_tool_calls ?? false,
35
+ reasoning: options.reasoning ?? null,
36
+ store: options.store ?? false,
37
+ stream: true,
38
+ include: options.include ?? [],
39
+ prompt_cache_key: options.prompt_cache_key,
40
+ text: options.text,
41
+ };
42
+ }
43
+ export class ChatGptTriggerError extends Error {
44
+ status;
45
+ body;
46
+ statusText;
47
+ constructor(status, body, statusText) {
48
+ super(`ChatGPT responses request failed (${status}): ${body || statusText || 'unknown error'}`);
49
+ this.name = 'ChatGptTriggerError';
50
+ this.status = status;
51
+ this.body = body;
52
+ this.statusText = statusText;
53
+ }
54
+ }
55
+ async function emitChatGptEvents(response, receiver) {
56
+ if (!response.body) {
57
+ return;
58
+ }
59
+ const reader = response.body.getReader();
60
+ const decoder = new TextDecoder();
61
+ let buffer = '';
62
+ let dataLines = [];
63
+ const emit = async () => {
64
+ if (dataLines.length === 0) {
65
+ return;
66
+ }
67
+ const data = dataLines.join('\n');
68
+ dataLines = [];
69
+ if (!data) {
70
+ return;
71
+ }
72
+ let event;
73
+ try {
74
+ event = JSON.parse(data);
75
+ }
76
+ catch {
77
+ return;
78
+ }
79
+ await receiver.onEvent(event);
80
+ };
81
+ while (true) {
82
+ const { value, done } = await reader.read();
83
+ buffer += decoder.decode(value ?? new Uint8Array(), { stream: !done });
84
+ const lines = buffer.split(/\r?\n/);
85
+ buffer = lines.pop() ?? '';
86
+ for (const line of lines) {
87
+ if (line === '') {
88
+ await emit();
89
+ continue;
90
+ }
91
+ if (line.startsWith('data:')) {
92
+ dataLines.push(line.slice('data:'.length).trimStart());
93
+ }
94
+ }
95
+ if (done) {
96
+ break;
97
+ }
98
+ }
99
+ if (buffer.length > 0) {
100
+ dataLines.push(buffer.trim());
101
+ }
102
+ await emit();
103
+ }
104
+ export class ChatGptClient {
105
+ baseUrl;
106
+ codexBaseUrl;
107
+ headers;
108
+ dispatcher;
109
+ constructor(credentials, options = {}) {
110
+ const normalizedBaseUrl = normalizeChatgptBaseUrl(options.baseUrl ?? DEFAULT_CHATGPT_BASE_URL);
111
+ this.baseUrl = normalizedBaseUrl;
112
+ this.codexBaseUrl = ensureCodexBaseUrl(normalizedBaseUrl);
113
+ const originator = options.originator ??
114
+ process.env[CODEX_INTERNAL_ORIGINATOR_OVERRIDE_ENV_VAR] ??
115
+ DEFAULT_ORIGINATOR;
116
+ const userAgent = options.userAgent ?? buildUserAgent(originator, resolveCodexHome(options.codexHome));
117
+ this.headers = {
118
+ Authorization: `Bearer ${credentials.accessToken}`,
119
+ 'ChatGPT-Account-ID': credentials.accountId,
120
+ originator,
121
+ 'User-Agent': userAgent,
122
+ };
123
+ this.dispatcher = resolveProxyAgent(this.baseUrl, options);
124
+ }
125
+ async request(path, init = {}) {
126
+ return this.requestAtBase(this.baseUrl, path, init);
127
+ }
128
+ async responses(payload, init = {}) {
129
+ const headers = new Headers(init.headers ?? {});
130
+ if (!headers.has('accept')) {
131
+ const stream = Boolean(payload.stream);
132
+ headers.set('accept', stream ? 'text/event-stream' : 'application/json');
133
+ }
134
+ return this.requestAtBase(this.codexBaseUrl, 'responses', {
135
+ ...init,
136
+ method: init.method ?? 'POST',
137
+ headers,
138
+ json: payload,
139
+ });
140
+ }
141
+ async trigger(payload, receiver, init = {}) {
142
+ const response = await this.responsesWithRetry(payload, init);
143
+ if (!response.ok) {
144
+ const body = await response.text();
145
+ throw new ChatGptTriggerError(response.status, body, response.statusText);
146
+ }
147
+ await emitChatGptEvents(response, receiver);
148
+ return response.status;
149
+ }
150
+ async responsesWithRetry(payload, init) {
151
+ try {
152
+ return await this.responses(payload, init);
153
+ }
154
+ catch (err) {
155
+ if (!isRetriableFetchError(err)) {
156
+ throw err;
157
+ }
158
+ await delay(250);
159
+ return await this.responses(payload, init);
160
+ }
161
+ }
162
+ async requestAtBase(baseUrl, path, init) {
163
+ const url = new URL(path, baseUrl);
164
+ const headers = new Headers(init.headers ?? {});
165
+ for (const [key, value] of Object.entries(this.headers)) {
166
+ headers.set(key, value);
167
+ }
168
+ let body = init.body;
169
+ if (init.json !== undefined) {
170
+ body = JSON.stringify(init.json);
171
+ if (!headers.has('content-type')) {
172
+ headers.set('content-type', 'application/json');
173
+ }
174
+ }
175
+ const { json, ...rest } = init;
176
+ return fetch(url.toString(), {
177
+ ...rest,
178
+ headers,
179
+ body,
180
+ dispatcher: this.dispatcher,
181
+ });
182
+ }
183
+ }
184
+ function isRetriableFetchError(err) {
185
+ if (!(err instanceof TypeError))
186
+ return false;
187
+ return err.message.toLowerCase().includes('fetch failed');
188
+ }
189
+ function delay(ms) {
190
+ return new Promise((resolve) => setTimeout(resolve, ms));
191
+ }
192
+ export function credentialsFromAuthState(auth) {
193
+ if (auth.mode !== 'chatgpt' || !auth.tokens) {
194
+ throw new Error('ChatGPT token data is not available.');
195
+ }
196
+ if (!auth.tokens.accountId) {
197
+ throw new Error('ChatGPT account id is missing.');
198
+ }
199
+ return {
200
+ accessToken: auth.tokens.accessToken,
201
+ accountId: auth.tokens.accountId,
202
+ };
203
+ }
204
+ export async function createChatGptClientFromManager(manager, options = {}) {
205
+ const auth = await manager.auth();
206
+ if (!auth) {
207
+ throw new Error('Auth data is not available.');
208
+ }
209
+ const credentials = credentialsFromAuthState(auth);
210
+ return new ChatGptClient(credentials, options);
211
+ }
212
+ function normalizeChatgptBaseUrl(baseUrl) {
213
+ let normalized = baseUrl.trim();
214
+ while (normalized.endsWith('/')) {
215
+ normalized = normalized.slice(0, -1);
216
+ }
217
+ const needsBackendApi = (normalized.startsWith('https://chatgpt.com') ||
218
+ normalized.startsWith('https://chat.openai.com')) &&
219
+ !normalized.includes('/backend-api');
220
+ if (needsBackendApi) {
221
+ normalized = `${normalized}/backend-api`;
222
+ }
223
+ return normalized.endsWith('/') ? normalized : `${normalized}/`;
224
+ }
225
+ function ensureCodexBaseUrl(baseUrl) {
226
+ const normalized = normalizeChatgptBaseUrl(baseUrl);
227
+ if (normalized.includes('/codex/')) {
228
+ return normalized;
229
+ }
230
+ return normalized.endsWith('/') ? `${normalized}codex/` : `${normalized}/codex/`;
231
+ }
232
+ function buildUserAgent(originator, codexHome) {
233
+ const version = resolveClientVersion(codexHome);
234
+ const osType = resolveOsType();
235
+ const osVersion = os.release();
236
+ const arch = resolveArchitecture();
237
+ const terminal = resolveTerminalToken();
238
+ const candidate = `${originator}/${version} (${osType} ${osVersion}; ${arch}) ${terminal}`;
239
+ return sanitizeHeaderValue(candidate);
240
+ }
241
+ function resolveClientVersion(codexHome) {
242
+ const version = readCodexVersionFromHome(codexHome);
243
+ if (!version) {
244
+ return '0.0.0';
245
+ }
246
+ return normalizeClientVersion(version) ?? '0.0.0';
247
+ }
248
+ function readCodexVersionFromHome(codexHome) {
249
+ try {
250
+ const versionPath = path.join(codexHome, 'version.json');
251
+ const raw = readFileSync(versionPath, 'utf8');
252
+ const parsed = JSON.parse(raw);
253
+ return parsed.latest_version ?? parsed.version;
254
+ }
255
+ catch {
256
+ return undefined;
257
+ }
258
+ }
259
+ function normalizeClientVersion(version) {
260
+ const match = version.match(/(\\d+)\\.(\\d+)\\.(\\d+)/);
261
+ if (!match) {
262
+ return undefined;
263
+ }
264
+ return `${match[1]}.${match[2]}.${match[3]}`;
265
+ }
266
+ function resolveOsType() {
267
+ switch (os.type()) {
268
+ case 'Darwin':
269
+ return 'Mac OS';
270
+ case 'Windows_NT':
271
+ return 'Windows';
272
+ default:
273
+ return os.type();
274
+ }
275
+ }
276
+ function resolveArchitecture() {
277
+ switch (process.arch) {
278
+ case 'x64':
279
+ return 'x86_64';
280
+ default:
281
+ return process.arch;
282
+ }
283
+ }
284
+ function resolveTerminalToken() {
285
+ const termProgram = process.env.TERM_PROGRAM;
286
+ if (termProgram) {
287
+ const version = process.env.TERM_PROGRAM_VERSION;
288
+ return version ? `${termProgram}/${version}` : termProgram;
289
+ }
290
+ const term = process.env.TERM;
291
+ if (term) {
292
+ return term;
293
+ }
294
+ return 'unknown';
295
+ }
296
+ function sanitizeHeaderValue(value) {
297
+ return Array.from(value)
298
+ .map((ch) => {
299
+ if (ch >= ' ' && ch <= '~') {
300
+ return ch;
301
+ }
302
+ return '_';
303
+ })
304
+ .join('');
305
+ }
306
+ function getEnvProxy(upper, lower) {
307
+ return process.env[upper] ?? process.env[lower];
308
+ }
309
+ function shouldBypassProxy(host, noProxy) {
310
+ if (!noProxy) {
311
+ return false;
312
+ }
313
+ const entries = noProxy
314
+ .split(',')
315
+ .map((entry) => entry.trim())
316
+ .filter(Boolean);
317
+ if (entries.length === 0) {
318
+ return false;
319
+ }
320
+ if (entries.includes('*')) {
321
+ return true;
322
+ }
323
+ return entries.some((entry) => {
324
+ if (entry.startsWith('.')) {
325
+ return host.endsWith(entry);
326
+ }
327
+ return host === entry;
328
+ });
329
+ }
330
+ function resolveProxyAgent(baseUrl, options) {
331
+ if (options.useEnvProxy === false) {
332
+ return undefined;
333
+ }
334
+ if (options.proxyUrl) {
335
+ return new ProxyAgent(options.proxyUrl);
336
+ }
337
+ const url = new URL(baseUrl);
338
+ const host = url.hostname;
339
+ const noProxy = getEnvProxy('NO_PROXY', 'no_proxy');
340
+ if (shouldBypassProxy(host, noProxy)) {
341
+ return undefined;
342
+ }
343
+ const httpsProxy = getEnvProxy('HTTPS_PROXY', 'https_proxy');
344
+ const httpProxy = getEnvProxy('HTTP_PROXY', 'http_proxy');
345
+ const proxyUrl = url.protocol === 'https:' ? (httpsProxy ?? httpProxy) : (httpProxy ?? httpsProxy);
346
+ if (!proxyUrl) {
347
+ return undefined;
348
+ }
349
+ return new ProxyAgent(proxyUrl);
350
+ }
351
+ //# sourceMappingURL=chatgpt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chatgpt.js","sourceRoot":"","sources":["../../src/llm/chatgpt.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import { AuthCredentialsStoreMode } from '../auth/schema.js';
2
+ export interface BrowserLoginOptions {
3
+ codexHome?: string;
4
+ clientId?: string;
5
+ issuer?: string;
6
+ port?: number;
7
+ openBrowser?: boolean;
8
+ forceState?: string;
9
+ forcedChatgptWorkspaceId?: string;
10
+ storeMode?: AuthCredentialsStoreMode;
11
+ originator?: string;
12
+ }
13
+ export interface LoginServer {
14
+ authUrl: string;
15
+ actualPort: number;
16
+ waitForCompletion(): Promise<void>;
17
+ cancel(): Promise<void>;
18
+ }
19
+ export declare function runLoginServer(options?: BrowserLoginOptions): Promise<LoginServer>;
20
+ export declare function buildAuthorizeUrl(issuer: string, clientId: string, redirectUri: string, pkce: {
21
+ codeVerifier: string;
22
+ codeChallenge: string;
23
+ }, state: string, forcedChatgptWorkspaceId?: string, originator?: string): string;
24
+ export declare function ensureWorkspaceAllowed(expected: string | undefined, idToken: string): void;
25
+ //# sourceMappingURL=browserLogin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browserLogin.d.ts","sourceRoot":"","sources":["../../src/oauth/browserLogin.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,wBAAwB,EAMzB,MAAM,mBAAmB,CAAC;AAQ3B,MAAM,WAAW,mBAAmB;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,SAAS,CAAC,EAAE,wBAAwB,CAAC;IACrC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACzB;AAED,wBAAsB,cAAc,CAAC,OAAO,GAAE,mBAAwB,GAAG,OAAO,CAAC,WAAW,CAAC,CAqH5F;AA2FD,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,EACrD,KAAK,EAAE,MAAM,EACb,wBAAwB,CAAC,EAAE,MAAM,EACjC,UAAU,CAAC,EAAE,MAAM,GAClB,MAAM,CAoBR;AAgBD,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAe1F"}
@@ -0,0 +1,231 @@
1
+ import http from 'node:http';
2
+ import net from 'node:net';
3
+ import { URL } from 'node:url';
4
+ import { CLIENT_ID, CODEX_INTERNAL_ORIGINATOR_OVERRIDE_ENV_VAR, DEFAULT_ISSUER, DEFAULT_LOGIN_PORT, DEFAULT_ORIGINATOR, } from '../auth/schema.js';
5
+ import { persistTokens, resolveCodexHome } from '../auth/storage.js';
6
+ import { getBooleanClaim, getStringClaim, jwtAuthClaims } from '../utils/jwt.js';
7
+ import { openBrowser } from '../utils/openBrowser.js';
8
+ import { generatePkce, generateState } from './pkce.js';
9
+ import { exchangeCodeForTokens, obtainApiKey } from './tokenExchange.js';
10
+ import { parseIdToken } from './tokenParsing.js';
11
+ export async function runLoginServer(options = {}) {
12
+ const codexHome = resolveCodexHome(options.codexHome);
13
+ const clientId = options.clientId ?? CLIENT_ID;
14
+ const issuer = (options.issuer ?? DEFAULT_ISSUER).replace(/\/$/, '');
15
+ const port = options.port ?? DEFAULT_LOGIN_PORT;
16
+ const openInBrowser = options.openBrowser ?? true;
17
+ const storeMode = options.storeMode ?? 'file';
18
+ const originator = options.originator ??
19
+ process.env[CODEX_INTERNAL_ORIGINATOR_OVERRIDE_ENV_VAR] ??
20
+ DEFAULT_ORIGINATOR;
21
+ const pkce = generatePkce();
22
+ const state = options.forceState ?? generateState();
23
+ const { server, actualPort } = await bindServer(port);
24
+ const redirectUri = `http://localhost:${actualPort}/auth/callback`;
25
+ const authUrl = buildAuthorizeUrl(issuer, clientId, redirectUri, pkce, state, options.forcedChatgptWorkspaceId, originator);
26
+ if (openInBrowser) {
27
+ openBrowser(authUrl);
28
+ }
29
+ const completion = createCompletion();
30
+ server.on('request', async (req, res) => {
31
+ const url = new URL(req.url ?? '/', 'http://localhost');
32
+ if (url.pathname === '/auth/callback') {
33
+ try {
34
+ const queryState = url.searchParams.get('state');
35
+ if (queryState !== state) {
36
+ respondPlain(res, 400, 'State mismatch');
37
+ return;
38
+ }
39
+ const code = url.searchParams.get('code');
40
+ if (!code) {
41
+ respondPlain(res, 400, 'Missing authorization code');
42
+ return;
43
+ }
44
+ const tokens = await exchangeCodeForTokens(issuer, clientId, redirectUri, pkce.codeVerifier, code);
45
+ ensureWorkspaceAllowed(options.forcedChatgptWorkspaceId, tokens.idToken);
46
+ let apiKey;
47
+ try {
48
+ apiKey = await obtainApiKey(issuer, clientId, tokens.idToken);
49
+ }
50
+ catch {
51
+ apiKey = undefined;
52
+ }
53
+ persistTokens(codexHome, apiKey, tokens.idToken, tokens.accessToken, tokens.refreshToken, storeMode);
54
+ const successUrl = composeSuccessUrl(actualPort, issuer, tokens.idToken, tokens.accessToken);
55
+ res.statusCode = 302;
56
+ res.setHeader('Location', successUrl);
57
+ res.setHeader('Connection', 'close');
58
+ res.end();
59
+ }
60
+ catch (error) {
61
+ const message = error instanceof Error ? error.message : String(error);
62
+ respondPlain(res, 500, `Token exchange failed: ${message}`);
63
+ }
64
+ return;
65
+ }
66
+ if (url.pathname === '/success') {
67
+ respondHtml(res, 200, successHtml());
68
+ completion.resolve();
69
+ server.close();
70
+ return;
71
+ }
72
+ if (url.pathname === '/cancel') {
73
+ respondPlain(res, 200, 'Login cancelled');
74
+ completion.reject(new Error('Login cancelled'));
75
+ server.close();
76
+ return;
77
+ }
78
+ respondPlain(res, 404, 'Not Found');
79
+ });
80
+ return {
81
+ authUrl,
82
+ actualPort,
83
+ waitForCompletion: () => completion.promise,
84
+ cancel: async () => {
85
+ await sendCancelRequest(actualPort);
86
+ },
87
+ };
88
+ }
89
+ function createCompletion() {
90
+ let resolve;
91
+ let reject;
92
+ const promise = new Promise((res, rej) => {
93
+ resolve = res;
94
+ reject = rej;
95
+ });
96
+ return { promise, resolve: resolve, reject: reject };
97
+ }
98
+ async function bindServer(port) {
99
+ const maxAttempts = 10;
100
+ const retryDelayMs = 200;
101
+ let cancelAttempted = false;
102
+ for (let attempt = 0; attempt < maxAttempts; attempt += 1) {
103
+ const server = http.createServer();
104
+ const result = await new Promise((resolve, reject) => {
105
+ server.once('error', (err) => {
106
+ reject(err);
107
+ });
108
+ server.listen(port, '127.0.0.1', () => {
109
+ const address = server.address();
110
+ if (!address || typeof address === 'string') {
111
+ reject(new Error('Unable to determine the server port'));
112
+ return;
113
+ }
114
+ resolve({ server, actualPort: address.port });
115
+ });
116
+ }).catch(async (err) => {
117
+ if (err instanceof Error && err.code === 'EADDRINUSE') {
118
+ if (!cancelAttempted) {
119
+ cancelAttempted = true;
120
+ await sendCancelRequest(port);
121
+ }
122
+ await sleep(retryDelayMs);
123
+ return null;
124
+ }
125
+ throw err;
126
+ });
127
+ if (result) {
128
+ return result;
129
+ }
130
+ }
131
+ throw new Error(`Port 127.0.0.1:${port} is already in use`);
132
+ }
133
+ function respondPlain(res, status, body) {
134
+ res.statusCode = status;
135
+ res.setHeader('Content-Type', 'text/plain; charset=utf-8');
136
+ res.setHeader('Connection', 'close');
137
+ res.end(body);
138
+ }
139
+ function respondHtml(res, status, body) {
140
+ res.statusCode = status;
141
+ res.setHeader('Content-Type', 'text/html; charset=utf-8');
142
+ res.setHeader('Connection', 'close');
143
+ res.end(body);
144
+ }
145
+ function successHtml() {
146
+ return `<!doctype html>
147
+ <html lang="en">
148
+ <head>
149
+ <meta charset="utf-8" />
150
+ <title>Codex login complete</title>
151
+ <style>
152
+ body { font-family: system-ui, -apple-system, sans-serif; margin: 40px; }
153
+ h1 { font-size: 20px; }
154
+ p { color: #555; }
155
+ </style>
156
+ </head>
157
+ <body>
158
+ <h1>Signed in</h1>
159
+ <p>You can return to the terminal.</p>
160
+ </body>
161
+ </html>`;
162
+ }
163
+ export function buildAuthorizeUrl(issuer, clientId, redirectUri, pkce, state, forcedChatgptWorkspaceId, originator) {
164
+ const query = {
165
+ response_type: 'code',
166
+ client_id: clientId,
167
+ redirect_uri: redirectUri,
168
+ scope: 'openid profile email offline_access',
169
+ code_challenge: pkce.codeChallenge,
170
+ code_challenge_method: 'S256',
171
+ id_token_add_organizations: 'true',
172
+ codex_cli_simplified_flow: 'true',
173
+ state,
174
+ originator: originator ?? DEFAULT_ORIGINATOR,
175
+ };
176
+ if (forcedChatgptWorkspaceId) {
177
+ query.allowed_workspace_id = forcedChatgptWorkspaceId;
178
+ }
179
+ const qs = new URLSearchParams(query);
180
+ return `${issuer}/oauth/authorize?${qs.toString()}`;
181
+ }
182
+ async function sendCancelRequest(port) {
183
+ await new Promise((resolve) => {
184
+ const client = net.connect({ host: '127.0.0.1', port }, () => {
185
+ client.write(`GET /cancel HTTP/1.1\r\nHost: 127.0.0.1:${port}\r\nConnection: close\r\n\r\n`);
186
+ });
187
+ client.setTimeout(2000, () => {
188
+ client.destroy();
189
+ resolve();
190
+ });
191
+ client.on('error', () => resolve());
192
+ client.on('close', () => resolve());
193
+ });
194
+ }
195
+ export function ensureWorkspaceAllowed(expected, idToken) {
196
+ if (!expected) {
197
+ return;
198
+ }
199
+ const info = parseIdToken(idToken);
200
+ const actual = info.chatgpt_account_id;
201
+ if (!actual) {
202
+ throw new Error('Login is restricted to a specific workspace, but the token did not include an chatgpt_account_id claim.');
203
+ }
204
+ if (actual !== expected) {
205
+ throw new Error(`Login is restricted to workspace id ${expected}.`);
206
+ }
207
+ }
208
+ function composeSuccessUrl(port, issuer, idToken, accessToken) {
209
+ const tokenClaims = jwtAuthClaims(idToken);
210
+ const accessClaims = jwtAuthClaims(accessToken);
211
+ const orgId = getStringClaim(tokenClaims.organization_id) ?? '';
212
+ const projectId = getStringClaim(tokenClaims.project_id) ?? '';
213
+ const completed = getBooleanClaim(tokenClaims.completed_platform_onboarding) ?? false;
214
+ const isOwner = getBooleanClaim(tokenClaims.is_org_owner) ?? false;
215
+ const needsSetup = !completed && isOwner;
216
+ const planType = getStringClaim(accessClaims.chatgpt_plan_type) ?? '';
217
+ const platformUrl = issuer === DEFAULT_ISSUER ? 'https://platform.openai.com' : 'https://platform.api.openai.org';
218
+ const params = new URLSearchParams({
219
+ id_token: idToken,
220
+ needs_setup: String(needsSetup),
221
+ org_id: orgId,
222
+ project_id: projectId,
223
+ plan_type: planType,
224
+ platform_url: platformUrl,
225
+ });
226
+ return `http://localhost:${port}/success?${params.toString()}`;
227
+ }
228
+ async function sleep(ms) {
229
+ await new Promise((resolve) => setTimeout(resolve, ms));
230
+ }
231
+ //# sourceMappingURL=browserLogin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browserLogin.js","sourceRoot":"","sources":["../../src/oauth/browserLogin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { AuthCredentialsStoreMode } from '../auth/schema.js';
2
+ export interface DeviceCode {
3
+ verificationUrl: string;
4
+ userCode: string;
5
+ deviceAuthId: string;
6
+ interval: number;
7
+ }
8
+ export interface DeviceCodeOptions {
9
+ codexHome?: string;
10
+ issuer?: string;
11
+ clientId?: string;
12
+ forcedChatgptWorkspaceId?: string;
13
+ storeMode?: AuthCredentialsStoreMode;
14
+ }
15
+ export interface DeviceCodeLoginOptions extends DeviceCodeOptions {
16
+ onDeviceCode?: (code: DeviceCode) => void;
17
+ }
18
+ export declare function requestDeviceCode(options?: DeviceCodeOptions): Promise<DeviceCode>;
19
+ export declare function completeDeviceCodeLogin(options: DeviceCodeOptions, deviceCode: DeviceCode): Promise<void>;
20
+ export declare function runDeviceCodeLogin(options?: DeviceCodeLoginOptions): Promise<DeviceCode>;
21
+ //# sourceMappingURL=deviceCode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deviceCode.d.ts","sourceRoot":"","sources":["../../src/oauth/deviceCode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAA6B,MAAM,mBAAmB,CAAC;AAMxF,MAAM,WAAW,UAAU;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,SAAS,CAAC,EAAE,wBAAwB,CAAC;CACtC;AAED,MAAM,WAAW,sBAAuB,SAAQ,iBAAiB;IAC/D,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,CAAC;CAC3C;AAED,wBAAsB,iBAAiB,CAAC,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAAC,UAAU,CAAC,CAwC5F;AAED,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,iBAAiB,EAC1B,UAAU,EAAE,UAAU,GACrB,OAAO,CAAC,IAAI,CAAC,CAwCf;AAED,wBAAsB,kBAAkB,CACtC,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,UAAU,CAAC,CAKrB"}