claude-code-openai 0.1.11 → 0.1.13

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 (2) hide show
  1. package/dist/cli.js +60 -20
  2. package/package.json +1 -1
package/dist/cli.js CHANGED
@@ -186131,6 +186131,32 @@ async function getOpenAIAccessToken() {
186131
186131
  }
186132
186132
  return tokens.access_token;
186133
186133
  }
186134
+ async function obtainApiKey(idToken) {
186135
+ const controller = new AbortController;
186136
+ const timer = setTimeout(() => controller.abort(), 15000);
186137
+ try {
186138
+ const body = new URLSearchParams({
186139
+ grant_type: "urn:ietf:params:oauth:grant-type:token-exchange",
186140
+ client_id: OPENAI_OAUTH_CONFIG.CLIENT_ID,
186141
+ requested_token: "openai-api-key",
186142
+ subject_token: idToken,
186143
+ subject_token_type: "urn:ietf:params:oauth:token-type:id_token"
186144
+ });
186145
+ const resp = await fetch(OPENAI_OAUTH_CONFIG.TOKEN_URL, {
186146
+ method: "POST",
186147
+ headers: { "Content-Type": "application/x-www-form-urlencoded" },
186148
+ body: body.toString(),
186149
+ signal: controller.signal
186150
+ });
186151
+ if (!resp.ok) {
186152
+ throw new Error(`API key exchange failed: ${resp.status}`);
186153
+ }
186154
+ const data = await resp.json();
186155
+ return data.access_token;
186156
+ } finally {
186157
+ clearTimeout(timer);
186158
+ }
186159
+ }
186134
186160
  async function startOpenAIOAuthFlow(options) {
186135
186161
  const codeVerifier = generateCodeVerifier();
186136
186162
  const codeChallenge = generateCodeChallenge(codeVerifier);
@@ -186139,14 +186165,15 @@ async function startOpenAIOAuthFlow(options) {
186139
186165
  const port = await listener.start(OPENAI_OAUTH_CONFIG.CALLBACK_PORT);
186140
186166
  const redirectUri = `http://localhost:${port}/auth/callback`;
186141
186167
  const authUrl = new URL(OPENAI_OAUTH_CONFIG.AUTHORIZE_URL);
186142
- authUrl.searchParams.append("client_id", OPENAI_OAUTH_CONFIG.CLIENT_ID);
186143
186168
  authUrl.searchParams.append("response_type", "code");
186169
+ authUrl.searchParams.append("client_id", OPENAI_OAUTH_CONFIG.CLIENT_ID);
186144
186170
  authUrl.searchParams.append("redirect_uri", redirectUri);
186145
186171
  authUrl.searchParams.append("scope", OPENAI_OAUTH_CONFIG.SCOPES.join(" "));
186146
186172
  authUrl.searchParams.append("code_challenge", codeChallenge);
186147
186173
  authUrl.searchParams.append("code_challenge_method", "S256");
186174
+ authUrl.searchParams.append("id_token_add_organizations", "true");
186175
+ authUrl.searchParams.append("codex_cli_simplified_flow", "true");
186148
186176
  authUrl.searchParams.append("state", state3);
186149
- authUrl.searchParams.append("audience", OPENAI_OAUTH_CONFIG.AUDIENCE);
186150
186177
  const urlStr = authUrl.toString();
186151
186178
  logForDebugging(`[OpenAI OAuth] Authorization URL: ${urlStr}`);
186152
186179
  if (options?.onUrl) {
@@ -186175,27 +186202,39 @@ async function startOpenAIOAuthFlow(options) {
186175
186202
  const tokenTimer = setTimeout(() => tokenController.abort(), 15000);
186176
186203
  let tokenResponse;
186177
186204
  try {
186205
+ const tokenBody = new URLSearchParams({
186206
+ grant_type: "authorization_code",
186207
+ code: authorizationCode,
186208
+ redirect_uri: redirectUri,
186209
+ client_id: OPENAI_OAUTH_CONFIG.CLIENT_ID,
186210
+ code_verifier: codeVerifier
186211
+ });
186178
186212
  tokenResponse = await fetch(OPENAI_OAUTH_CONFIG.TOKEN_URL, {
186179
186213
  method: "POST",
186180
- headers: { "Content-Type": "application/json" },
186181
- body: JSON.stringify({
186182
- grant_type: "authorization_code",
186183
- code: authorizationCode,
186184
- redirect_uri: redirectUri,
186185
- client_id: OPENAI_OAUTH_CONFIG.CLIENT_ID,
186186
- code_verifier: codeVerifier
186187
- }),
186214
+ headers: { "Content-Type": "application/x-www-form-urlencoded" },
186215
+ body: tokenBody.toString(),
186188
186216
  signal: tokenController.signal
186189
186217
  });
186190
186218
  } finally {
186191
186219
  clearTimeout(tokenTimer);
186192
186220
  }
186193
186221
  if (!tokenResponse.ok) {
186194
- throw new Error(`Token exchange failed: ${tokenResponse.status} ${tokenResponse.statusText}`);
186222
+ const errBody = await tokenResponse.text().catch(() => "");
186223
+ throw new Error(`Token exchange failed: ${tokenResponse.status} ${tokenResponse.statusText} ${errBody}`);
186195
186224
  }
186196
186225
  const data = await tokenResponse.json();
186226
+ logForDebugging("[OpenAI OAuth] Token exchange succeeded, obtaining API key...");
186227
+ let apiKey = null;
186228
+ if (data.id_token) {
186229
+ try {
186230
+ apiKey = await obtainApiKey(data.id_token);
186231
+ logForDebugging("[OpenAI OAuth] API key obtained successfully");
186232
+ } catch (err) {
186233
+ logForDebugging(`[OpenAI OAuth] API key exchange failed (will use access_token): ${err instanceof Error ? err.message : String(err)}`);
186234
+ }
186235
+ }
186197
186236
  const tokens = {
186198
- access_token: data.access_token,
186237
+ access_token: apiKey || data.access_token,
186199
186238
  refresh_token: data.refresh_token || null,
186200
186239
  expires_at: data.expires_in ? Date.now() + data.expires_in * 1000 : null,
186201
186240
  id_token: data.id_token
@@ -186215,10 +186254,10 @@ var init_openai_oauth = __esm(() => {
186215
186254
  init_auth_code_listener();
186216
186255
  OPENAI_OAUTH_CONFIG = {
186217
186256
  CLIENT_ID: "app_EMoamEEZ73f0CkXaXp7hrann",
186218
- AUTHORIZE_URL: "https://auth.openai.com/authorize",
186257
+ ISSUER: "https://auth.openai.com",
186258
+ AUTHORIZE_URL: "https://auth.openai.com/oauth/authorize",
186219
186259
  TOKEN_URL: "https://auth.openai.com/oauth/token",
186220
- AUDIENCE: "https://api.openai.com/v1",
186221
- SCOPES: ["openid", "profile", "email", "offline_access"],
186260
+ SCOPES: ["openid", "profile", "email", "offline_access", "api.connectors.read", "api.connectors.invoke"],
186222
186261
  CALLBACK_PORT: 1455,
186223
186262
  REDIRECT_URI: "http://localhost:1455/auth/callback"
186224
186263
  };
@@ -204606,7 +204645,7 @@ var init_metadata = __esm(() => {
204606
204645
  isClaudeAiAuth: isClaudeAISubscriber(),
204607
204646
  version: "2.1.88-rebuild",
204608
204647
  versionBase: getVersionBase(),
204609
- buildTime: "2026-04-01T10:13:56.609Z",
204648
+ buildTime: "2026-04-01T19:37:24.393Z",
204610
204649
  deploymentEnvironment: env4.detectDeploymentEnvironment(),
204611
204650
  ...isEnvTruthy(process.env.GITHUB_ACTIONS) && {
204612
204651
  githubEventName: process.env.GITHUB_EVENT_NAME,
@@ -592892,7 +592931,7 @@ function getAnthropicEnvMetadata() {
592892
592931
  function getBuildAgeMinutes() {
592893
592932
  if (false)
592894
592933
  ;
592895
- const buildTime = new Date("2026-04-01T10:13:56.609Z").getTime();
592934
+ const buildTime = new Date("2026-04-01T19:37:24.393Z").getTime();
592896
592935
  if (isNaN(buildTime))
592897
592936
  return;
592898
592937
  return Math.floor((Date.now() - buildTime) / 60000);
@@ -595140,7 +595179,8 @@ var init_openai_adapter = __esm(() => {
595140
595179
  "deprecated",
595141
595180
  "readOnly",
595142
595181
  "writeOnly",
595143
- "minLength"
595182
+ "minLength",
595183
+ "format"
595144
595184
  ];
595145
595185
  });
595146
595186
 
@@ -679462,7 +679502,7 @@ var init_bridge_kick = __esm(() => {
679462
679502
  var call56 = async () => {
679463
679503
  return {
679464
679504
  type: "text",
679465
- value: `${"2.1.88-rebuild"} (built ${"2026-04-01T10:13:56.609Z"})`
679505
+ value: `${"2.1.88-rebuild"} (built ${"2026-04-01T19:37:24.393Z"})`
679466
679506
  };
679467
679507
  }, version6, version_default;
679468
679508
  var init_version = __esm(() => {
@@ -777468,4 +777508,4 @@ async function main2() {
777468
777508
  }
777469
777509
  main2();
777470
777510
 
777471
- //# debugId=6C6F0DB434BD161F64756E2164756E21
777511
+ //# debugId=9DF84E6A3A50E43864756E2164756E21
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-code-openai",
3
- "version": "0.1.11",
3
+ "version": "0.1.13",
4
4
  "description": "Claude Code CLI with OpenAI GPT-5.4 backend support",
5
5
  "type": "module",
6
6
  "bin": {