@commit451/salamander 1.0.3 → 1.0.5

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.
@@ -4,237 +4,17 @@ import { createServer } from 'http';
4
4
  import { URL } from 'url';
5
5
  import { exec } from 'child_process';
6
6
  import { promisify } from 'util';
7
- import { randomBytes, createHash } from 'crypto';
8
- import { OAuth2Client } from 'google-auth-library';
9
- import { saveAuth, loadAuth, clearAuth } from '../utils/storage.js';
10
- import { signInWithCredential, GoogleAuthProvider, getAuth, onAuthStateChanged } from 'firebase/auth';
7
+ import { clearAuth, loadAuth, saveAuth } from '../utils/storage.js';
8
+ import { getAuth, GoogleAuthProvider, onAuthStateChanged, signInWithCredential } from 'firebase/auth';
11
9
  import app from '../config/firebase.js';
12
10
  const execAsync = promisify(exec);
13
11
  const auth = getAuth(app);
14
12
  export class AuthService {
15
13
  static currentUser = null;
16
14
  static customUserInfo = null;
17
- static tokens = null;
18
- static oauth2Client = null;
19
15
  static authStateInitialized = false;
20
- static config = {
21
- clientId: '87955960620-mu7hdiu5nntb4al1ekk79dn73bu5otvu.apps.googleusercontent.com',
22
- redirectUri: 'http://localhost:8080/oauth/callback',
23
- scope: 'openid email profile'
24
- };
25
- static getOAuth2Client() {
26
- if (!this.oauth2Client) {
27
- this.oauth2Client = new OAuth2Client({
28
- clientId: this.config.clientId,
29
- redirectUri: this.config.redirectUri
30
- });
31
- }
32
- return this.oauth2Client;
33
- }
34
- static generateCodeVerifier() {
35
- return randomBytes(32).toString('base64url');
36
- }
37
- static generateCodeChallenge(verifier) {
38
- return createHash('sha256').update(verifier).digest('base64url');
39
- }
40
- static async initialize() {
41
- if (this.authStateInitialized)
42
- return;
43
- // First, try to restore from stored auth
44
- const storedAuth = await loadAuth();
45
- if (storedAuth?.accessToken) {
46
- try {
47
- // Try to validate the stored access token
48
- this.customUserInfo = await this.fetchUserInfo(storedAuth.accessToken);
49
- this.tokens = {
50
- access_token: storedAuth.accessToken,
51
- refresh_token: storedAuth.refreshToken,
52
- expires_in: 3600,
53
- token_type: 'Bearer'
54
- };
55
- // Sign in to Firebase using the stored token
56
- if (this.tokens.access_token) {
57
- try {
58
- const credential = GoogleAuthProvider.credential(null, this.tokens.access_token);
59
- const userCredential = await signInWithCredential(auth, credential);
60
- this.currentUser = userCredential.user;
61
- console.log(chalk.green('✅ Session restored from stored credentials'));
62
- }
63
- catch (firebaseError) {
64
- // Firebase sign-in failed, but we have valid Google tokens
65
- console.log(chalk.yellow('⚠️ Firebase auth failed but Google tokens are valid'));
66
- }
67
- }
68
- }
69
- catch (error) {
70
- // Access token is invalid, try to refresh if we have a refresh token
71
- if (storedAuth.refreshToken) {
72
- try {
73
- console.log(chalk.yellow('🔄 Access token expired, refreshing...'));
74
- this.tokens = await this.refreshAccessToken(storedAuth.refreshToken);
75
- this.customUserInfo = await this.fetchUserInfo(this.tokens.access_token);
76
- // Save the new tokens
77
- await saveAuth({
78
- userId: storedAuth.userId,
79
- email: storedAuth.email,
80
- accessToken: this.tokens.access_token,
81
- refreshToken: this.tokens.refresh_token
82
- });
83
- // Sign in to Firebase with refreshed token
84
- try {
85
- const credential = GoogleAuthProvider.credential(null, this.tokens.access_token);
86
- const userCredential = await signInWithCredential(auth, credential);
87
- this.currentUser = userCredential.user;
88
- }
89
- catch (firebaseError) {
90
- console.log(chalk.yellow('⚠️ Firebase auth failed but Google tokens refreshed'));
91
- }
92
- console.log(chalk.green('✅ Tokens refreshed and session restored'));
93
- }
94
- catch (refreshError) {
95
- // Refresh failed, clear stored auth
96
- console.log(chalk.yellow('⚠️ Token refresh failed, will need to re-authenticate'));
97
- await clearAuth();
98
- this.customUserInfo = null;
99
- this.tokens = null;
100
- this.currentUser = null;
101
- }
102
- }
103
- else {
104
- // No refresh token, clear stored auth
105
- console.log(chalk.yellow('⚠️ No valid tokens found, will need to authenticate'));
106
- await clearAuth();
107
- this.customUserInfo = null;
108
- this.tokens = null;
109
- this.currentUser = null;
110
- }
111
- }
112
- }
113
- // Set up Firebase Auth state observer for any future changes
114
- onAuthStateChanged(auth, async (user) => {
115
- if (!user && this.currentUser) {
116
- // User signed out, clean up
117
- this.currentUser = null;
118
- this.customUserInfo = null;
119
- this.tokens = null;
120
- await clearAuth();
121
- }
122
- });
123
- this.authStateInitialized = true;
124
- }
125
- static get isAuthenticated() {
126
- return this.currentUser !== null;
127
- }
128
- static get user() {
129
- return this.currentUser;
130
- }
131
- static get userInfo() {
132
- return this.customUserInfo;
133
- }
134
- static get userId() {
135
- return this.currentUser?.uid || null;
136
- }
137
- static get accessToken() {
138
- return this.tokens?.access_token || null;
139
- }
140
- static async waitForAuthInit() {
141
- if (!this.authStateInitialized) {
142
- await this.initialize();
143
- }
144
- }
145
- static async ensureValidToken() {
146
- if (!this.tokens?.access_token) {
147
- return null;
148
- }
149
- // Try to use current token
150
- try {
151
- await this.fetchUserInfo(this.tokens.access_token);
152
- return this.tokens.access_token;
153
- }
154
- catch (error) {
155
- // Token is invalid, try to refresh
156
- if (this.tokens.refresh_token) {
157
- try {
158
- const storedAuth = await loadAuth();
159
- this.tokens = await this.refreshAccessToken(this.tokens.refresh_token);
160
- this.customUserInfo = await this.fetchUserInfo(this.tokens.access_token);
161
- // Save the new tokens
162
- await saveAuth({
163
- userId: storedAuth?.userId || this.customUserInfo.id,
164
- email: storedAuth?.email || this.customUserInfo.email,
165
- accessToken: this.tokens.access_token,
166
- refreshToken: this.tokens.refresh_token
167
- });
168
- return this.tokens.access_token;
169
- }
170
- catch (refreshError) {
171
- // Refresh failed
172
- this.tokens = null;
173
- this.customUserInfo = null;
174
- await clearAuth();
175
- return null;
176
- }
177
- }
178
- return null;
179
- }
180
- }
181
- static async fetchUserInfo(accessToken) {
182
- const response = await fetch('https://www.googleapis.com/oauth2/v2/userinfo', {
183
- headers: {
184
- 'Authorization': `Bearer ${accessToken}`,
185
- },
186
- });
187
- if (!response.ok) {
188
- throw new Error(`Failed to fetch user info: ${response.statusText}`);
189
- }
190
- return await response.json();
191
- }
192
- static async exchangeCodeForTokens(code, codeVerifier) {
193
- const params = new URLSearchParams({
194
- client_id: this.config.clientId,
195
- code,
196
- code_verifier: codeVerifier,
197
- grant_type: 'authorization_code',
198
- redirect_uri: this.config.redirectUri,
199
- });
200
- console.log(chalk.dim('Debug - Token exchange params:'));
201
- console.log(chalk.dim(` client_id: ${this.config.clientId}`));
202
- console.log(chalk.dim(` grant_type: authorization_code`));
203
- console.log(chalk.dim(` redirect_uri: ${this.config.redirectUri}`));
204
- console.log(chalk.dim(` code_verifier: ${codeVerifier.substring(0, 10)}...`));
205
- console.log(chalk.dim(` code: ${code.substring(0, 10)}...`));
206
- const response = await fetch('https://oauth2.googleapis.com/token', {
207
- method: 'POST',
208
- headers: {
209
- 'Content-Type': 'application/x-www-form-urlencoded',
210
- },
211
- body: params.toString(),
212
- });
213
- if (!response.ok) {
214
- const error = await response.text();
215
- console.log(chalk.red(`Debug - Full error response: ${error}`));
216
- throw new Error(`Token exchange failed: ${error}`);
217
- }
218
- return await response.json();
219
- }
220
- static async refreshAccessToken(refreshToken) {
221
- const client = this.getOAuth2Client();
222
- client.setCredentials({
223
- refresh_token: refreshToken
224
- });
225
- try {
226
- const { credentials } = await client.refreshAccessToken();
227
- return {
228
- access_token: credentials.access_token,
229
- refresh_token: credentials.refresh_token ?? refreshToken,
230
- expires_in: credentials.expiry_date ? Math.floor((credentials.expiry_date - Date.now()) / 1000) : 3600,
231
- token_type: 'Bearer'
232
- };
233
- }
234
- catch (error) {
235
- throw new Error(`Token refresh failed: ${error.message}`);
236
- }
237
- }
16
+ static authStateReady = null;
17
+ static CLIENT_ID = '87955960620-mu7hdiu5nntb4al1ekk79dn73bu5otvu.apps.googleusercontent.com';
238
18
  static async openBrowser(url) {
239
19
  const platform = process.platform;
240
20
  let command;
@@ -278,7 +58,35 @@ export class AuthService {
278
58
  }
279
59
  if (code) {
280
60
  res.writeHead(200, { 'Content-Type': 'text/html' });
281
- res.end('<h1>Authentication Successful!</h1><p>You can close this window and return to the CLI.</p>');
61
+ res.end(`
62
+ <!DOCTYPE html>
63
+ <html>
64
+ <head>
65
+ <title>Authentication Successful</title>
66
+ <style>
67
+ body {
68
+ background-color: #000000;
69
+ color: #ffffff;
70
+ font-family: Arial, sans-serif;
71
+ text-align: center;
72
+ padding: 50px;
73
+ margin: 0;
74
+ }
75
+ h1 {
76
+ font-size: 2.5em;
77
+ margin-bottom: 20px;
78
+ }
79
+ p {
80
+ font-size: 1.2em;
81
+ }
82
+ </style>
83
+ </head>
84
+ <body>
85
+ <h1>Authentication Successful!</h1>
86
+ <p>You can close this window and return to the CLI.</p>
87
+ </body>
88
+ </html>
89
+ `);
282
90
  authCodeResolve(code);
283
91
  }
284
92
  else {
@@ -297,26 +105,162 @@ export class AuthService {
297
105
  });
298
106
  });
299
107
  }
108
+ static async exchangeCodeForTokens(code) {
109
+ const params = new URLSearchParams({
110
+ client_id: this.CLIENT_ID,
111
+ code,
112
+ grant_type: 'authorization_code',
113
+ redirect_uri: 'http://localhost:8080/oauth/callback',
114
+ });
115
+ const response = await fetch('https://oauth2.googleapis.com/token', {
116
+ method: 'POST',
117
+ headers: {
118
+ 'Content-Type': 'application/x-www-form-urlencoded',
119
+ },
120
+ body: params.toString(),
121
+ });
122
+ if (!response.ok) {
123
+ const error = await response.text();
124
+ throw new Error(`Token exchange failed: ${error}`);
125
+ }
126
+ return await response.json();
127
+ }
128
+ static async refreshToken(refreshToken) {
129
+ const params = new URLSearchParams({
130
+ grant_type: 'refresh_token',
131
+ refresh_token: refreshToken,
132
+ client_id: this.CLIENT_ID,
133
+ });
134
+ const response = await fetch('https://oauth2.googleapis.com/token', {
135
+ method: 'POST',
136
+ headers: {
137
+ 'Content-Type': 'application/x-www-form-urlencoded',
138
+ },
139
+ body: params.toString(),
140
+ });
141
+ if (!response.ok) {
142
+ const errorText = await response.text();
143
+ throw new Error(`Token refresh failed: ${response.status} ${errorText}`);
144
+ }
145
+ const tokens = await response.json();
146
+ // Sign in to Firebase with the new access token
147
+ const credential = GoogleAuthProvider.credential(null, tokens.access_token);
148
+ await signInWithCredential(auth, credential);
149
+ // Update stored tokens with new access token (refresh token may be the same)
150
+ const existingAuth = await loadAuth();
151
+ await saveAuth({
152
+ userId: existingAuth?.userId || '',
153
+ email: existingAuth?.email || '',
154
+ accessToken: tokens.access_token,
155
+ refreshToken: tokens.refresh_token || existingAuth?.refreshToken
156
+ });
157
+ }
158
+ static async initialize() {
159
+ if (this.authStateInitialized) {
160
+ // Wait for auth state to be ready if initialization is in progress
161
+ if (this.authStateReady) {
162
+ await this.authStateReady;
163
+ }
164
+ return;
165
+ }
166
+ // Create a promise that resolves when auth state is determined
167
+ let resolveAuthState;
168
+ this.authStateReady = new Promise((resolve) => {
169
+ resolveAuthState = resolve;
170
+ });
171
+ // Try to restore from stored auth
172
+ const storedAuth = await loadAuth();
173
+ let authAttemptMade = false;
174
+ if (storedAuth?.userId && storedAuth.email && storedAuth.accessToken) {
175
+ authAttemptMade = true;
176
+ try {
177
+ // Try to restore Firebase session using stored access token
178
+ const credential = GoogleAuthProvider.credential(null, storedAuth.accessToken);
179
+ await signInWithCredential(auth, credential);
180
+ console.log(chalk.green('✅ Session restored from storage'));
181
+ }
182
+ catch (error) {
183
+ // Token might be expired, try refresh token if available
184
+ if (storedAuth.refreshToken) {
185
+ try {
186
+ await this.refreshToken(storedAuth.refreshToken);
187
+ console.log(chalk.green('✅ Session refreshed from storage'));
188
+ }
189
+ catch (refreshError) {
190
+ console.log(chalk.yellow('⚠️ Stored session expired, please sign in again'));
191
+ await clearAuth();
192
+ authAttemptMade = false;
193
+ }
194
+ }
195
+ else {
196
+ console.log(chalk.yellow('⚠️ Stored session expired, please sign in again'));
197
+ await clearAuth();
198
+ authAttemptMade = false;
199
+ }
200
+ }
201
+ }
202
+ // Set up Firebase Auth state observer
203
+ onAuthStateChanged(auth, async (user) => {
204
+ if (user) {
205
+ this.currentUser = user;
206
+ if (!this.customUserInfo) {
207
+ this.customUserInfo = {
208
+ id: user.uid,
209
+ email: user.email || '',
210
+ name: user.displayName || user.email?.split('@')[0] || ''
211
+ };
212
+ }
213
+ // Only update user info in storage, preserve OAuth tokens if they exist
214
+ const existingAuth = await loadAuth();
215
+ await saveAuth({
216
+ userId: user.uid,
217
+ email: user.email || '',
218
+ accessToken: existingAuth?.accessToken || undefined,
219
+ refreshToken: existingAuth?.refreshToken || undefined
220
+ });
221
+ }
222
+ else {
223
+ // User signed out, clean up
224
+ this.currentUser = null;
225
+ this.customUserInfo = null;
226
+ await clearAuth();
227
+ }
228
+ // Resolve the auth state promise once we know the state
229
+ if (resolveAuthState) {
230
+ resolveAuthState();
231
+ resolveAuthState = null;
232
+ }
233
+ });
234
+ this.authStateInitialized = true;
235
+ // If no auth attempt was made, resolve immediately since no user will be set
236
+ if (!authAttemptMade) {
237
+ setTimeout(() => {
238
+ if (resolveAuthState) {
239
+ resolveAuthState();
240
+ }
241
+ }, 100);
242
+ }
243
+ // Wait for auth state to be determined
244
+ await this.authStateReady;
245
+ }
246
+ static get isAuthenticated() {
247
+ return this.currentUser !== null;
248
+ }
249
+ static get user() {
250
+ return this.currentUser;
251
+ }
252
+ static get userId() {
253
+ return this.currentUser?.uid || null;
254
+ }
300
255
  static async loginFlow() {
301
256
  console.log(chalk.blue('\n🔐 Authentication Required'));
302
257
  console.log('Please sign in with Google to continue.\n');
303
258
  try {
304
- // Check if we need OAuth credentials
305
- if (this.config.clientId === 'YOUR_CLIENT_ID') {
306
- console.log(chalk.red('❌ OAuth credentials not configured.'));
307
- console.log(chalk.yellow('Please set up Google OAuth 2.0 credentials:'));
308
- console.log('1. Go to https://console.cloud.google.com/apis/credentials');
309
- console.log('2. Create OAuth 2.0 Client IDs (select "Desktop application")');
310
- console.log('3. Add http://localhost:8080/oauth/callback as redirect URI');
311
- console.log('4. Set GOOGLE_CLIENT_ID environment variable');
312
- console.log(chalk.dim('Note: No client secret needed - this uses PKCE for security'));
313
- return false;
314
- }
315
259
  // Ensure auth state is initialized
316
260
  await this.initialize();
317
261
  // Check if user is already authenticated
318
262
  if (this.isAuthenticated) {
319
- console.log(chalk.green('✅ Session restored successfully!'));
263
+ console.log(chalk.green('✅ Already signed in!'));
320
264
  return true;
321
265
  }
322
266
  const proceed = await input({
@@ -330,43 +274,36 @@ export class AuthService {
330
274
  // Start local server to receive callback
331
275
  const { server, authCodePromise } = await this.startLocalServer();
332
276
  try {
333
- // Generate PKCE parameters manually
334
- const client = this.getOAuth2Client();
335
- const codeVerifier = this.generateCodeVerifier();
336
- const codeChallenge = this.generateCodeChallenge(codeVerifier);
337
- const authUrl = client.generateAuthUrl({
338
- access_type: 'offline',
339
- prompt: 'consent',
340
- scope: this.config.scope.split(' ')
341
- });
342
- // Add PKCE parameters to the URL manually
343
- const urlWithPKCE = new URL(authUrl);
344
- urlWithPKCE.searchParams.set('code_challenge', codeChallenge);
345
- urlWithPKCE.searchParams.set('code_challenge_method', 'S256');
277
+ // Create OAuth URL (simplified without PKCE)
278
+ const authUrl = new URL('https://accounts.google.com/o/oauth2/v2/auth');
279
+ authUrl.searchParams.set('client_id', this.CLIENT_ID);
280
+ authUrl.searchParams.set('redirect_uri', 'http://localhost:8080/oauth/callback');
281
+ authUrl.searchParams.set('response_type', 'code');
282
+ authUrl.searchParams.set('scope', 'openid email profile');
283
+ authUrl.searchParams.set('access_type', 'offline');
284
+ authUrl.searchParams.set('prompt', 'consent');
346
285
  // Open browser
347
- await this.openBrowser(urlWithPKCE.toString());
286
+ await this.openBrowser(authUrl.toString());
348
287
  console.log('Please complete the authentication in your browser...\n');
349
288
  // Wait for callback
350
289
  const authCode = await authCodePromise;
351
290
  console.log(chalk.green('✅ Authorization code received!'));
352
291
  // Exchange code for tokens
353
292
  console.log('Exchanging authorization code for tokens...');
354
- this.tokens = await this.exchangeCodeForTokens(authCode, codeVerifier);
355
- // Get user info
356
- this.customUserInfo = await this.fetchUserInfo(this.tokens.access_token);
293
+ const tokens = await this.exchangeCodeForTokens(authCode);
357
294
  // Sign in to Firebase Auth using the Google OAuth token
358
- const credential = GoogleAuthProvider.credential(null, this.tokens.access_token);
295
+ const credential = GoogleAuthProvider.credential(null, tokens.access_token);
359
296
  const userCredential = await signInWithCredential(auth, credential);
360
297
  this.currentUser = userCredential.user;
361
- console.log(chalk.green(`✅ Welcome ${this.customUserInfo.name || this.customUserInfo.email}!`));
362
- console.log(chalk.green('✅ Login successful!'));
363
- // Store auth info
298
+ // Store the OAuth tokens immediately after successful login
364
299
  await saveAuth({
365
- userId: this.customUserInfo.id,
366
- email: this.customUserInfo.email,
367
- accessToken: this.tokens.access_token,
368
- refreshToken: this.tokens.refresh_token
300
+ userId: userCredential.user.uid,
301
+ email: userCredential.user.email || '',
302
+ accessToken: tokens.access_token,
303
+ refreshToken: tokens.refresh_token
369
304
  });
305
+ console.log(chalk.green(`✅ Welcome ${userCredential.user.displayName || userCredential.user.email}!`));
306
+ console.log(chalk.green('✅ Login successful!'));
370
307
  return true;
371
308
  }
372
309
  finally {
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/services/auth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/services/auth.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,6 @@ export declare class CommandListener {
3
3
  private activeListeners;
4
4
  private isShuttingDown;
5
5
  startListening(runner: Runner): Promise<void>;
6
- stopListening(runnerId: string): void;
6
+ stopListening(runnerId: string): Promise<void>;
7
7
  }
8
8
  //# sourceMappingURL=command-listener.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"command-listener.d.ts","sourceRoot":"","sources":["../../src/services/command-listener.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,MAAM,EAAC,MAAM,oBAAoB,CAAC;AAK1C,qBAAa,eAAe;IACxB,OAAO,CAAC,eAAe,CAAsC;IAC7D,OAAO,CAAC,cAAc,CAAS;IAEzB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkFnD,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;CAOxC"}
1
+ {"version":3,"file":"command-listener.d.ts","sourceRoot":"","sources":["../../src/services/command-listener.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,MAAM,EAAC,MAAM,oBAAoB,CAAC;AAK1C,qBAAa,eAAe;IACxB,OAAO,CAAC,eAAe,CAAsC;IAC7D,OAAO,CAAC,cAAc,CAAS;IAEzB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA2F7C,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAcvD"}
@@ -15,9 +15,17 @@ export class CommandListener {
15
15
  if (runner.machineId !== deviceId) {
16
16
  throw new Error('Cannot listen to non-local runner');
17
17
  }
18
+ // Set runner as online
19
+ await RunnerService.setRunnerOnline(runner.id);
18
20
  console.log(chalk.blue(`👂 Started listening for commands on runner "${runner.name}"`));
19
21
  console.log(chalk.gray(` Directory: ${runner.directory}`));
20
22
  console.log(chalk.gray(` Type: ${runner.runnerType}`));
23
+ console.log('');
24
+ console.log(chalk.yellow('⚠️ SECURITY WARNING'));
25
+ console.log(chalk.yellow(' Claude commands will be executed with --dangerously-skip-permissions'));
26
+ console.log(chalk.yellow(' This bypasses normal permission checks for file access and operations'));
27
+ console.log(chalk.yellow(' Be careful about what directories you run this in and what commands you execute'));
28
+ console.log('');
21
29
  console.log(chalk.gray(` Press Ctrl+C to stop`));
22
30
  console.log(chalk.gray(` Keep in mind, if your machine goes to sleep, it won't process commands`));
23
31
  const unsubscribe = RunnerService.listenToRunner(runner.id, async (updatedRunner) => {
@@ -64,20 +72,27 @@ export class CommandListener {
64
72
  });
65
73
  this.activeListeners.set(runner.id, unsubscribe);
66
74
  // Set up graceful shutdown
67
- const cleanup = () => {
75
+ const cleanup = async () => {
68
76
  this.isShuttingDown = true;
69
- this.stopListening(runner.id);
70
- console.log(chalk.blue(`👋 Stopped listening to runner "${runner.name}"`));
77
+ await this.stopListening(runner.id);
78
+ console.log(chalk.blue(`👋 Stopped runner "${runner.name}"`));
71
79
  process.exit(0);
72
80
  };
73
81
  process.on('SIGINT', cleanup);
74
82
  process.on('SIGTERM', cleanup);
75
83
  }
76
- stopListening(runnerId) {
84
+ async stopListening(runnerId) {
77
85
  const unsubscribe = this.activeListeners.get(runnerId);
78
86
  if (unsubscribe) {
79
87
  unsubscribe();
80
88
  this.activeListeners.delete(runnerId);
89
+ // Set runner as offline
90
+ try {
91
+ await RunnerService.setRunnerOffline(runnerId);
92
+ }
93
+ catch (error) {
94
+ console.error(chalk.red('Failed to set runner offline'));
95
+ }
81
96
  }
82
97
  }
83
98
  }
@@ -1 +1 @@
1
- {"version":3,"file":"command-listener.js","sourceRoot":"","sources":["../../src/services/command-listener.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"command-listener.js","sourceRoot":"","sources":["../../src/services/command-listener.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../src/services/executor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,KAAK,MAAM,EAAa,MAAM,oBAAoB,CAAC;AAE3D,MAAM,WAAW,aAAa;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;CACzB;AAED,qBAAa,eAAe;WACX,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAiCpF,OAAO,CAAC,MAAM,CAAC,oBAAoB;IAsCnC,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAiB/B,OAAO,CAAC,MAAM,CAAC,WAAW;CAY7B"}
1
+ {"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../src/services/executor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,KAAK,MAAM,EAAa,MAAM,oBAAoB,CAAC;AAE3D,MAAM,WAAW,aAAa;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;CACzB;AAED,qBAAa,eAAe;WACX,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAiCpF,OAAO,CAAC,MAAM,CAAC,oBAAoB;IAsBnC,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAiB/B,OAAO,CAAC,MAAM,CAAC,WAAW;CAY7B"}