mirror of
https://github.com/getcompanion-ai/co-mono.git
synced 2026-04-19 17:04:41 +00:00
fix(ai): guard google oauth node http imports for browser bundlers closes #1330
This commit is contained in:
parent
0232c44064
commit
b0a8d79844
2 changed files with 38 additions and 4 deletions
|
|
@ -6,7 +6,7 @@
|
||||||
* It is only intended for CLI use, not browser environments.
|
* It is only intended for CLI use, not browser environments.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import type { Server } from "http";
|
import type { Server } from "node:http";
|
||||||
import { generatePKCE } from "./pkce.js";
|
import { generatePKCE } from "./pkce.js";
|
||||||
import type { OAuthCredentials, OAuthLoginCallbacks, OAuthProviderInterface } from "./types.js";
|
import type { OAuthCredentials, OAuthLoginCallbacks, OAuthProviderInterface } from "./types.js";
|
||||||
|
|
||||||
|
|
@ -14,6 +14,14 @@ type AntigravityCredentials = OAuthCredentials & {
|
||||||
projectId: string;
|
projectId: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
let _createServer: typeof import("node:http").createServer | null = null;
|
||||||
|
let _httpImportPromise: Promise<void> | null = null;
|
||||||
|
if (typeof process !== "undefined" && (process.versions?.node || process.versions?.bun)) {
|
||||||
|
_httpImportPromise = import("node:http").then((m) => {
|
||||||
|
_createServer = m.createServer;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
// Antigravity OAuth credentials (different from Gemini CLI)
|
// Antigravity OAuth credentials (different from Gemini CLI)
|
||||||
const decode = (s: string) => atob(s);
|
const decode = (s: string) => atob(s);
|
||||||
const CLIENT_ID = decode(
|
const CLIENT_ID = decode(
|
||||||
|
|
@ -46,8 +54,17 @@ type CallbackServerInfo = {
|
||||||
/**
|
/**
|
||||||
* Start a local HTTP server to receive the OAuth callback
|
* Start a local HTTP server to receive the OAuth callback
|
||||||
*/
|
*/
|
||||||
|
async function getNodeCreateServer(): Promise<typeof import("node:http").createServer> {
|
||||||
|
if (_createServer) return _createServer;
|
||||||
|
if (_httpImportPromise) {
|
||||||
|
await _httpImportPromise;
|
||||||
|
}
|
||||||
|
if (_createServer) return _createServer;
|
||||||
|
throw new Error("Antigravity OAuth is only available in Node.js environments");
|
||||||
|
}
|
||||||
|
|
||||||
async function startCallbackServer(): Promise<CallbackServerInfo> {
|
async function startCallbackServer(): Promise<CallbackServerInfo> {
|
||||||
const { createServer } = await import("http");
|
const createServer = await getNodeCreateServer();
|
||||||
|
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
let result: { code: string; state: string } | null = null;
|
let result: { code: string; state: string } | null = null;
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
* It is only intended for CLI use, not browser environments.
|
* It is only intended for CLI use, not browser environments.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import type { Server } from "http";
|
import type { Server } from "node:http";
|
||||||
import { generatePKCE } from "./pkce.js";
|
import { generatePKCE } from "./pkce.js";
|
||||||
import type { OAuthCredentials, OAuthLoginCallbacks, OAuthProviderInterface } from "./types.js";
|
import type { OAuthCredentials, OAuthLoginCallbacks, OAuthProviderInterface } from "./types.js";
|
||||||
|
|
||||||
|
|
@ -14,6 +14,14 @@ type GeminiCredentials = OAuthCredentials & {
|
||||||
projectId: string;
|
projectId: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
let _createServer: typeof import("node:http").createServer | null = null;
|
||||||
|
let _httpImportPromise: Promise<void> | null = null;
|
||||||
|
if (typeof process !== "undefined" && (process.versions?.node || process.versions?.bun)) {
|
||||||
|
_httpImportPromise = import("node:http").then((m) => {
|
||||||
|
_createServer = m.createServer;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
const decode = (s: string) => atob(s);
|
const decode = (s: string) => atob(s);
|
||||||
const CLIENT_ID = decode(
|
const CLIENT_ID = decode(
|
||||||
"NjgxMjU1ODA5Mzk1LW9vOGZ0Mm9wcmRybnA5ZTNhcWY2YXYzaG1kaWIxMzVqLmFwcHMuZ29vZ2xldXNlcmNvbnRlbnQuY29t",
|
"NjgxMjU1ODA5Mzk1LW9vOGZ0Mm9wcmRybnA5ZTNhcWY2YXYzaG1kaWIxMzVqLmFwcHMuZ29vZ2xldXNlcmNvbnRlbnQuY29t",
|
||||||
|
|
@ -38,8 +46,17 @@ type CallbackServerInfo = {
|
||||||
/**
|
/**
|
||||||
* Start a local HTTP server to receive the OAuth callback
|
* Start a local HTTP server to receive the OAuth callback
|
||||||
*/
|
*/
|
||||||
|
async function getNodeCreateServer(): Promise<typeof import("node:http").createServer> {
|
||||||
|
if (_createServer) return _createServer;
|
||||||
|
if (_httpImportPromise) {
|
||||||
|
await _httpImportPromise;
|
||||||
|
}
|
||||||
|
if (_createServer) return _createServer;
|
||||||
|
throw new Error("Gemini CLI OAuth is only available in Node.js environments");
|
||||||
|
}
|
||||||
|
|
||||||
async function startCallbackServer(): Promise<CallbackServerInfo> {
|
async function startCallbackServer(): Promise<CallbackServerInfo> {
|
||||||
const { createServer } = await import("http");
|
const createServer = await getNodeCreateServer();
|
||||||
|
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
let result: { code: string; state: string } | null = null;
|
let result: { code: string; state: string } | null = null;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue