freeturtle 0.1.18 → 0.1.19

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.
@@ -15,14 +15,14 @@ const program = new Command();
15
15
  program
16
16
  .name("freeturtle")
17
17
  .description("An open-source framework for deploying autonomous AI CEOs that run onchain businesses.")
18
- .version("0.1.18");
18
+ .version("0.1.19");
19
19
  program
20
20
  .command("hello")
21
21
  .description("Verify the CLI is working")
22
22
  .action(() => {
23
23
  console.log(" \x1b[38;2;94;255;164m _____ ____\x1b[0m");
24
24
  console.log(" \x1b[38;2;94;255;164m/ \\ | o |\x1b[0m");
25
- console.log(" \x1b[38;2;94;255;164m| |/ ___\\|\x1b[0m FreeTurtle v0.1.18");
25
+ console.log(" \x1b[38;2;94;255;164m| |/ ___\\|\x1b[0m FreeTurtle v0.1.19");
26
26
  console.log(" \x1b[38;2;94;255;164m|_________/\x1b[0m");
27
27
  console.log(" \x1b[38;2;94;255;164m|_|_| |_|_|\x1b[0m");
28
28
  });
@@ -9,11 +9,8 @@ export interface GoogleOAuthCredentials {
9
9
  */
10
10
  export declare function createGoogleOAuth2Client(creds: GoogleOAuthCredentials): OAuth2Client;
11
11
  /**
12
- * Run the browser-based OAuth2 consent flow.
13
- *
14
- * Works both locally and on remote servers:
15
- * - Locally: starts a localhost HTTP server, opens browser, waits for callback
16
- * - Remote: prints the auth URL, user approves in browser, pastes the callback URL back
12
+ * Run the OAuth2 consent flow.
13
+ * Automatically picks the right flow based on the environment.
17
14
  */
18
15
  export declare function runGoogleOAuthFlow(clientId: string, clientSecret: string, opts?: {
19
16
  port?: number;
@@ -10,6 +10,16 @@ export function createGoogleOAuth2Client(creds) {
10
10
  client.setCredentials({ refresh_token: creds.refreshToken });
11
11
  return client;
12
12
  }
13
+ /**
14
+ * Detect if we're running on a headless/remote server (no display).
15
+ */
16
+ function isHeadless() {
17
+ if (process.platform === "darwin")
18
+ return false;
19
+ if (process.platform === "win32")
20
+ return false;
21
+ return !process.env.DISPLAY && !process.env.WAYLAND_DISPLAY;
22
+ }
13
23
  /**
14
24
  * Open a URL in the user's default browser.
15
25
  */
@@ -20,26 +30,53 @@ function openBrowser(url) {
20
30
  });
21
31
  }
22
32
  /**
23
- * Prompt the user to paste a URL from their browser (for remote/headless servers).
33
+ * Exchange an auth code for a refresh token.
24
34
  */
25
- function waitForPastedUrl() {
26
- return new Promise((resolve) => {
27
- const rl = createInterface({ input: process.stdin, output: process.stdout });
35
+ async function exchangeCode(oauth2Client) {
36
+ return async (code) => {
37
+ const { tokens } = await oauth2Client.getToken(code);
38
+ if (!tokens.refresh_token) {
39
+ throw new Error("No refresh_token received. Revoke app access at myaccount.google.com/permissions and retry.");
40
+ }
41
+ return tokens.refresh_token;
42
+ };
43
+ }
44
+ /**
45
+ * Remote/headless flow: print URL, user pastes callback URL back.
46
+ */
47
+ async function runRemoteFlow(clientId, clientSecret) {
48
+ // Use a fixed port so the redirect URI is predictable
49
+ const redirectUri = "http://127.0.0.1:39043/callback";
50
+ const oauth2Client = new OAuth2Client(clientId, clientSecret, redirectUri);
51
+ const authUrl = oauth2Client.generateAuthUrl({
52
+ access_type: "offline",
53
+ scope: ["https://mail.google.com/"],
54
+ prompt: "consent",
55
+ });
56
+ console.log(`\nOpen this URL in your browser to authorize:\n\n ${authUrl}\n`);
57
+ console.log("After approving, your browser will redirect to a localhost URL that won't load.");
58
+ console.log("That's expected. Copy the FULL URL from your browser's address bar and paste it below.\n");
59
+ const rl = createInterface({ input: process.stdin, output: process.stdout });
60
+ const pastedUrl = await new Promise((resolve) => {
28
61
  rl.question("Paste the callback URL here: ", (answer) => {
29
62
  rl.close();
30
63
  resolve(answer.trim());
31
64
  });
32
65
  });
66
+ const url = new URL(pastedUrl);
67
+ const error = url.searchParams.get("error");
68
+ if (error)
69
+ throw new Error(`OAuth authorization denied: ${error}`);
70
+ const code = url.searchParams.get("code");
71
+ if (!code)
72
+ throw new Error("No authorization code found in the pasted URL.");
73
+ const exchange = await exchangeCode(oauth2Client);
74
+ return exchange(code);
33
75
  }
34
76
  /**
35
- * Run the browser-based OAuth2 consent flow.
36
- *
37
- * Works both locally and on remote servers:
38
- * - Locally: starts a localhost HTTP server, opens browser, waits for callback
39
- * - Remote: prints the auth URL, user approves in browser, pastes the callback URL back
77
+ * Local flow: start localhost server, open browser, wait for callback.
40
78
  */
41
- export async function runGoogleOAuthFlow(clientId, clientSecret, opts) {
42
- const port = opts?.port ?? 0; // 0 = OS picks a free port
79
+ async function runLocalFlow(clientId, clientSecret, port) {
43
80
  return new Promise((resolve, reject) => {
44
81
  const server = http.createServer();
45
82
  const timeout = setTimeout(() => {
@@ -62,36 +99,7 @@ export async function runGoogleOAuthFlow(clientId, clientSecret, opts) {
62
99
  prompt: "consent",
63
100
  });
64
101
  console.log(`\nOpen this URL in your browser to authorize:\n\n ${authUrl}\n`);
65
- console.log("After approving, you'll be redirected to a localhost URL.");
66
- console.log("If the redirect works automatically, great! Otherwise,");
67
- console.log("copy the FULL URL from your browser's address bar and paste it below.\n");
68
102
  openBrowser(authUrl);
69
- // Race: either the localhost server receives the callback,
70
- // or the user pastes the URL manually (for remote servers).
71
- let settled = false;
72
- const handleCode = async (code) => {
73
- if (settled)
74
- return;
75
- settled = true;
76
- try {
77
- const { tokens } = await oauth2Client.getToken(code);
78
- if (!tokens.refresh_token) {
79
- clearTimeout(timeout);
80
- server.close();
81
- reject(new Error("No refresh_token received. Revoke app access at myaccount.google.com/permissions and retry."));
82
- return;
83
- }
84
- clearTimeout(timeout);
85
- server.close();
86
- resolve(tokens.refresh_token);
87
- }
88
- catch (err) {
89
- clearTimeout(timeout);
90
- server.close();
91
- reject(err);
92
- }
93
- };
94
- // Path 1: localhost callback server
95
103
  server.on("request", async (req, res) => {
96
104
  if (!req.url?.startsWith("/callback")) {
97
105
  res.writeHead(404);
@@ -104,7 +112,6 @@ export async function runGoogleOAuthFlow(clientId, clientSecret, opts) {
104
112
  if (error) {
105
113
  res.writeHead(200, { "Content-Type": "text/html" });
106
114
  res.end("<h1>Authorization denied</h1><p>You can close this tab.</p>");
107
- settled = true;
108
115
  clearTimeout(timeout);
109
116
  server.close();
110
117
  reject(new Error(`OAuth authorization denied: ${error}`));
@@ -115,44 +122,30 @@ export async function runGoogleOAuthFlow(clientId, clientSecret, opts) {
115
122
  res.end("<h1>Missing authorization code</h1>");
116
123
  return;
117
124
  }
118
- res.writeHead(200, { "Content-Type": "text/html" });
119
- res.end("<h1>Authorization successful!</h1><p>You can close this tab and return to the terminal.</p>");
120
- await handleCode(code);
121
- });
122
- // Path 2: user pastes the URL manually (remote server flow)
123
- waitForPastedUrl().then(async (pastedUrl) => {
124
- if (settled)
125
- return;
126
125
  try {
127
- const url = new URL(pastedUrl);
128
- const code = url.searchParams.get("code");
129
- const error = url.searchParams.get("error");
130
- if (error) {
131
- settled = true;
132
- clearTimeout(timeout);
133
- server.close();
134
- reject(new Error(`OAuth authorization denied: ${error}`));
135
- return;
136
- }
137
- if (!code) {
138
- settled = true;
126
+ const { tokens } = await oauth2Client.getToken(code);
127
+ if (!tokens.refresh_token) {
128
+ res.writeHead(200, { "Content-Type": "text/html" });
129
+ res.end("<h1>Error</h1><p>No refresh token received. Try revoking access at " +
130
+ '<a href="https://myaccount.google.com/permissions">Google Account Permissions</a> and retry.</p>');
139
131
  clearTimeout(timeout);
140
132
  server.close();
141
- reject(new Error("No authorization code found in the pasted URL."));
133
+ reject(new Error("No refresh_token received. Revoke app access at myaccount.google.com/permissions and retry."));
142
134
  return;
143
135
  }
144
- await handleCode(code);
136
+ res.writeHead(200, { "Content-Type": "text/html" });
137
+ res.end("<h1>Authorization successful!</h1><p>You can close this tab and return to the terminal.</p>");
138
+ clearTimeout(timeout);
139
+ server.close();
140
+ resolve(tokens.refresh_token);
145
141
  }
146
- catch {
147
- if (!settled) {
148
- settled = true;
149
- clearTimeout(timeout);
150
- server.close();
151
- reject(new Error("Invalid URL pasted. Please try again with `freeturtle connect gmail`."));
152
- }
142
+ catch (err) {
143
+ res.writeHead(500, { "Content-Type": "text/html" });
144
+ res.end("<h1>Token exchange failed</h1><p>Check the terminal for details.</p>");
145
+ clearTimeout(timeout);
146
+ server.close();
147
+ reject(err);
153
148
  }
154
- }).catch(() => {
155
- // stdin closed or readline error — ignore, server path may still work
156
149
  });
157
150
  });
158
151
  server.on("error", (err) => {
@@ -161,4 +154,14 @@ export async function runGoogleOAuthFlow(clientId, clientSecret, opts) {
161
154
  });
162
155
  });
163
156
  }
157
+ /**
158
+ * Run the OAuth2 consent flow.
159
+ * Automatically picks the right flow based on the environment.
160
+ */
161
+ export async function runGoogleOAuthFlow(clientId, clientSecret, opts) {
162
+ if (isHeadless()) {
163
+ return runRemoteFlow(clientId, clientSecret);
164
+ }
165
+ return runLocalFlow(clientId, clientSecret, opts?.port ?? 0);
166
+ }
164
167
  //# sourceMappingURL=google.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"google.js","sourceRoot":"","sources":["../../../src/oauth/google.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"google.js","sourceRoot":"","sources":["../../../src/oauth/google.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "freeturtle",
3
- "version": "0.1.18",
3
+ "version": "0.1.19",
4
4
  "description": "An open-source framework for deploying autonomous AI CEOs that run onchain businesses.",
5
5
  "type": "module",
6
6
  "main": "dist/bin/freeturtle.js",