@braingrid/cli 0.2.0 → 0.2.1

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 (219) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/README.md +54 -38
  3. package/dist/chunk-KNVWIF3L.js +401 -0
  4. package/dist/chunk-KNVWIF3L.js.map +1 -0
  5. package/dist/cli.js +6236 -245
  6. package/dist/cli.js.map +1 -1
  7. package/dist/gh-installer-B65ZOOC4.js +13 -0
  8. package/dist/gh-installer-B65ZOOC4.js.map +1 -0
  9. package/package.json +19 -11
  10. package/dist/build-config.d.ts +0 -26
  11. package/dist/build-config.d.ts.map +0 -1
  12. package/dist/build-config.js +0 -45
  13. package/dist/build-config.js.map +0 -1
  14. package/dist/cli.d.ts +0 -3
  15. package/dist/cli.d.ts.map +0 -1
  16. package/dist/handlers/auth.handlers.d.ts +0 -13
  17. package/dist/handlers/auth.handlers.d.ts.map +0 -1
  18. package/dist/handlers/auth.handlers.js +0 -111
  19. package/dist/handlers/auth.handlers.js.map +0 -1
  20. package/dist/handlers/index.d.ts +0 -13
  21. package/dist/handlers/index.d.ts.map +0 -1
  22. package/dist/handlers/index.js +0 -13
  23. package/dist/handlers/index.js.map +0 -1
  24. package/dist/handlers/init.handlers.d.ts +0 -10
  25. package/dist/handlers/init.handlers.d.ts.map +0 -1
  26. package/dist/handlers/init.handlers.js +0 -638
  27. package/dist/handlers/init.handlers.js.map +0 -1
  28. package/dist/handlers/project.handlers.d.ts +0 -36
  29. package/dist/handlers/project.handlers.d.ts.map +0 -1
  30. package/dist/handlers/project.handlers.js +0 -309
  31. package/dist/handlers/project.handlers.js.map +0 -1
  32. package/dist/handlers/requirement.handlers.d.ts +0 -32
  33. package/dist/handlers/requirement.handlers.d.ts.map +0 -1
  34. package/dist/handlers/requirement.handlers.js +0 -264
  35. package/dist/handlers/requirement.handlers.js.map +0 -1
  36. package/dist/handlers/status.handlers.d.ts +0 -12
  37. package/dist/handlers/status.handlers.d.ts.map +0 -1
  38. package/dist/handlers/status.handlers.js +0 -212
  39. package/dist/handlers/status.handlers.js.map +0 -1
  40. package/dist/handlers/task.handlers.d.ts +0 -29
  41. package/dist/handlers/task.handlers.d.ts.map +0 -1
  42. package/dist/handlers/task.handlers.js +0 -326
  43. package/dist/handlers/task.handlers.js.map +0 -1
  44. package/dist/handlers/types.d.ts +0 -10
  45. package/dist/handlers/types.d.ts.map +0 -1
  46. package/dist/handlers/types.js +0 -5
  47. package/dist/handlers/types.js.map +0 -1
  48. package/dist/handlers/update.handlers.d.ts +0 -16
  49. package/dist/handlers/update.handlers.d.ts.map +0 -1
  50. package/dist/handlers/update.handlers.js +0 -119
  51. package/dist/handlers/update.handlers.js.map +0 -1
  52. package/dist/services/auth.d.ts +0 -59
  53. package/dist/services/auth.d.ts.map +0 -1
  54. package/dist/services/auth.js +0 -549
  55. package/dist/services/auth.js.map +0 -1
  56. package/dist/services/claude.d.ts +0 -18
  57. package/dist/services/claude.d.ts.map +0 -1
  58. package/dist/services/claude.js +0 -164
  59. package/dist/services/claude.js.map +0 -1
  60. package/dist/services/credential-store.d.ts +0 -47
  61. package/dist/services/credential-store.d.ts.map +0 -1
  62. package/dist/services/credential-store.js +0 -89
  63. package/dist/services/credential-store.js.map +0 -1
  64. package/dist/services/internal/github-service.d.ts +0 -67
  65. package/dist/services/internal/github-service.d.ts.map +0 -1
  66. package/dist/services/internal/github-service.js +0 -81
  67. package/dist/services/internal/github-service.js.map +0 -1
  68. package/dist/services/internal/repository-service.d.ts +0 -79
  69. package/dist/services/internal/repository-service.d.ts.map +0 -1
  70. package/dist/services/internal/repository-service.js +0 -88
  71. package/dist/services/internal/repository-service.js.map +0 -1
  72. package/dist/services/oauth2-auth.d.ts +0 -76
  73. package/dist/services/oauth2-auth.d.ts.map +0 -1
  74. package/dist/services/oauth2-auth.js +0 -451
  75. package/dist/services/oauth2-auth.js.map +0 -1
  76. package/dist/services/project-service.d.ts +0 -24
  77. package/dist/services/project-service.d.ts.map +0 -1
  78. package/dist/services/project-service.js +0 -60
  79. package/dist/services/project-service.js.map +0 -1
  80. package/dist/services/requirement-service.d.ts +0 -32
  81. package/dist/services/requirement-service.d.ts.map +0 -1
  82. package/dist/services/requirement-service.js +0 -91
  83. package/dist/services/requirement-service.js.map +0 -1
  84. package/dist/services/task-service.d.ts +0 -22
  85. package/dist/services/task-service.d.ts.map +0 -1
  86. package/dist/services/task-service.js +0 -52
  87. package/dist/services/task-service.js.map +0 -1
  88. package/dist/types/api.d.ts +0 -16
  89. package/dist/types/api.d.ts.map +0 -1
  90. package/dist/types/api.js +0 -5
  91. package/dist/types/api.js.map +0 -1
  92. package/dist/types/auth.d.ts +0 -73
  93. package/dist/types/auth.d.ts.map +0 -1
  94. package/dist/types/auth.js +0 -2
  95. package/dist/types/auth.js.map +0 -1
  96. package/dist/types/claude.d.ts +0 -22
  97. package/dist/types/claude.d.ts.map +0 -1
  98. package/dist/types/claude.js +0 -2
  99. package/dist/types/claude.js.map +0 -1
  100. package/dist/types/github.d.ts +0 -105
  101. package/dist/types/github.d.ts.map +0 -1
  102. package/dist/types/github.js +0 -6
  103. package/dist/types/github.js.map +0 -1
  104. package/dist/types/local-project.d.ts +0 -30
  105. package/dist/types/local-project.d.ts.map +0 -1
  106. package/dist/types/local-project.js +0 -24
  107. package/dist/types/local-project.js.map +0 -1
  108. package/dist/types/project.d.ts +0 -56
  109. package/dist/types/project.d.ts.map +0 -1
  110. package/dist/types/project.js +0 -5
  111. package/dist/types/project.js.map +0 -1
  112. package/dist/types/requirement.d.ts +0 -69
  113. package/dist/types/requirement.d.ts.map +0 -1
  114. package/dist/types/requirement.js +0 -5
  115. package/dist/types/requirement.js.map +0 -1
  116. package/dist/types/task.d.ts +0 -44
  117. package/dist/types/task.d.ts.map +0 -1
  118. package/dist/types/task.js +0 -5
  119. package/dist/types/task.js.map +0 -1
  120. package/dist/utils/axios-retry.d.ts +0 -25
  121. package/dist/utils/axios-retry.d.ts.map +0 -1
  122. package/dist/utils/axios-retry.js +0 -174
  123. package/dist/utils/axios-retry.js.map +0 -1
  124. package/dist/utils/axios-with-auth.d.ts +0 -10
  125. package/dist/utils/axios-with-auth.d.ts.map +0 -1
  126. package/dist/utils/axios-with-auth.js +0 -118
  127. package/dist/utils/axios-with-auth.js.map +0 -1
  128. package/dist/utils/cli-tools.d.ts +0 -30
  129. package/dist/utils/cli-tools.d.ts.map +0 -1
  130. package/dist/utils/cli-tools.js +0 -199
  131. package/dist/utils/cli-tools.js.map +0 -1
  132. package/dist/utils/command-execution.d.ts +0 -30
  133. package/dist/utils/command-execution.d.ts.map +0 -1
  134. package/dist/utils/command-execution.js +0 -264
  135. package/dist/utils/command-execution.js.map +0 -1
  136. package/dist/utils/command-parser.d.ts +0 -85
  137. package/dist/utils/command-parser.d.ts.map +0 -1
  138. package/dist/utils/command-parser.js +0 -287
  139. package/dist/utils/command-parser.js.map +0 -1
  140. package/dist/utils/config.d.ts +0 -10
  141. package/dist/utils/config.d.ts.map +0 -1
  142. package/dist/utils/config.js +0 -77
  143. package/dist/utils/config.js.map +0 -1
  144. package/dist/utils/error-formatter.d.ts +0 -17
  145. package/dist/utils/error-formatter.d.ts.map +0 -1
  146. package/dist/utils/error-formatter.js +0 -115
  147. package/dist/utils/error-formatter.js.map +0 -1
  148. package/dist/utils/formatting.d.ts +0 -10
  149. package/dist/utils/formatting.d.ts.map +0 -1
  150. package/dist/utils/formatting.js +0 -122
  151. package/dist/utils/formatting.js.map +0 -1
  152. package/dist/utils/gh-installer.d.ts +0 -31
  153. package/dist/utils/gh-installer.d.ts.map +0 -1
  154. package/dist/utils/gh-installer.js +0 -296
  155. package/dist/utils/gh-installer.js.map +0 -1
  156. package/dist/utils/git-installer.d.ts +0 -31
  157. package/dist/utils/git-installer.d.ts.map +0 -1
  158. package/dist/utils/git-installer.js +0 -290
  159. package/dist/utils/git-installer.js.map +0 -1
  160. package/dist/utils/git.d.ts +0 -60
  161. package/dist/utils/git.d.ts.map +0 -1
  162. package/dist/utils/git.js +0 -144
  163. package/dist/utils/git.js.map +0 -1
  164. package/dist/utils/github-repo.d.ts +0 -43
  165. package/dist/utils/github-repo.d.ts.map +0 -1
  166. package/dist/utils/github-repo.js +0 -113
  167. package/dist/utils/github-repo.js.map +0 -1
  168. package/dist/utils/id-normalization.d.ts +0 -26
  169. package/dist/utils/id-normalization.d.ts.map +0 -1
  170. package/dist/utils/id-normalization.js +0 -45
  171. package/dist/utils/id-normalization.js.map +0 -1
  172. package/dist/utils/jwt.d.ts +0 -45
  173. package/dist/utils/jwt.d.ts.map +0 -1
  174. package/dist/utils/jwt.js +0 -64
  175. package/dist/utils/jwt.js.map +0 -1
  176. package/dist/utils/local-store.d.ts +0 -36
  177. package/dist/utils/local-store.d.ts.map +0 -1
  178. package/dist/utils/local-store.js +0 -94
  179. package/dist/utils/local-store.js.map +0 -1
  180. package/dist/utils/logger.d.ts +0 -36
  181. package/dist/utils/logger.d.ts.map +0 -1
  182. package/dist/utils/logger.js +0 -176
  183. package/dist/utils/logger.js.map +0 -1
  184. package/dist/utils/package-manager-installer.d.ts +0 -36
  185. package/dist/utils/package-manager-installer.d.ts.map +0 -1
  186. package/dist/utils/package-manager-installer.js +0 -106
  187. package/dist/utils/package-manager-installer.js.map +0 -1
  188. package/dist/utils/package-manager.d.ts +0 -31
  189. package/dist/utils/package-manager.d.ts.map +0 -1
  190. package/dist/utils/package-manager.js +0 -133
  191. package/dist/utils/package-manager.js.map +0 -1
  192. package/dist/utils/projects.d.ts +0 -23
  193. package/dist/utils/projects.d.ts.map +0 -1
  194. package/dist/utils/projects.js +0 -36
  195. package/dist/utils/projects.js.map +0 -1
  196. package/dist/utils/repository-access.d.ts +0 -89
  197. package/dist/utils/repository-access.d.ts.map +0 -1
  198. package/dist/utils/repository-access.js +0 -132
  199. package/dist/utils/repository-access.js.map +0 -1
  200. package/dist/utils/requirements.d.ts +0 -43
  201. package/dist/utils/requirements.d.ts.map +0 -1
  202. package/dist/utils/requirements.js +0 -79
  203. package/dist/utils/requirements.js.map +0 -1
  204. package/dist/utils/spinner.d.ts +0 -47
  205. package/dist/utils/spinner.d.ts.map +0 -1
  206. package/dist/utils/spinner.js +0 -101
  207. package/dist/utils/spinner.js.map +0 -1
  208. package/dist/utils/status-parser.d.ts +0 -95
  209. package/dist/utils/status-parser.d.ts.map +0 -1
  210. package/dist/utils/status-parser.js +0 -205
  211. package/dist/utils/status-parser.js.map +0 -1
  212. package/dist/utils/tasks.d.ts +0 -21
  213. package/dist/utils/tasks.d.ts.map +0 -1
  214. package/dist/utils/tasks.js +0 -63
  215. package/dist/utils/tasks.js.map +0 -1
  216. package/dist/utils/workspace-manager.d.ts +0 -65
  217. package/dist/utils/workspace-manager.d.ts.map +0 -1
  218. package/dist/utils/workspace-manager.js +0 -98
  219. package/dist/utils/workspace-manager.js.map +0 -1
@@ -1,549 +0,0 @@
1
- import axios from 'axios';
2
- import { axiosWithRetry } from '../utils/axios-retry.js';
3
- import { OAuth2Handler } from './oauth2-auth.js';
4
- import { getConfig } from '../utils/config.js';
5
- import { decodeJWT, isJWTExpired, extractUserFromJWT } from '../utils/jwt.js';
6
- import { getLogger } from '../utils/logger.js';
7
- import { credentialStore } from './credential-store.js';
8
- const KEYCHAIN_SERVICE = 'braingrid-cli';
9
- const KEYCHAIN_ACCOUNT = 'session';
10
- const GITHUB_KEYCHAIN_ACCOUNT = 'github-token';
11
- export class BraingridAuth {
12
- constructor(baseUrl) {
13
- this.lastValidationTime = 0;
14
- this.lastValidationResult = false;
15
- this.loginTime = 0;
16
- this.VALIDATION_CACHE_MS = 60 * 60 * 1000; // Cache validation for 1 hour
17
- this.POST_LOGIN_GRACE_MS = 24 * 60 * 60 * 1000; // 24 hours grace period after login
18
- this.oauthHandler = null;
19
- this.logger = getLogger();
20
- const config = getConfig();
21
- this.baseUrl = baseUrl || config.apiUrl || 'https://app.braingrid.ai';
22
- }
23
- async isAuthenticated(forceValidation = false) {
24
- try {
25
- const session = await this.getStoredSession();
26
- if (!session) {
27
- this.logger.debug('[AUTH] No stored session found');
28
- return false;
29
- }
30
- // Debug: Log session dates
31
- this.logger.debug('[AUTH] Session dates:', {
32
- created_at: session.created_at,
33
- updated_at: session.updated_at,
34
- login_time: session.login_time,
35
- now: new Date(),
36
- });
37
- // Check if session is expired (JWT tokens expire in 1 hour)
38
- if (this.isSessionExpired(session)) {
39
- this.logger.debug('[AUTH] Session expired (JWT token expired) - attempting automatic refresh');
40
- // Attempt to refresh the session using refresh token
41
- const refreshed = await this.refreshSession();
42
- if (refreshed) {
43
- this.logger.debug('[AUTH] Session refreshed successfully');
44
- return true;
45
- }
46
- this.logger.debug('[AUTH] Session refresh failed - authentication required');
47
- return false;
48
- }
49
- const now = Date.now();
50
- // If forced validation is requested, skip all caching and validate with server
51
- if (forceValidation) {
52
- this.logger.debug('[AUTH] Force validation requested - calling server');
53
- const validationResult = await this.validateSessionWithServer(session);
54
- this.lastValidationTime = now;
55
- this.lastValidationResult = validationResult.isValid;
56
- this.logger.debug(`[AUTH] Server validation result: isValid=${validationResult.isValid}, shouldClearSession=${validationResult.shouldClearSession}`);
57
- if (!validationResult.isValid && validationResult.shouldClearSession) {
58
- this.logger.debug('[AUTH] Clearing session due to validation failure');
59
- await this.clearSession();
60
- return false;
61
- }
62
- return validationResult.isValid;
63
- }
64
- // Grace period: If we're within 1 hour of login, skip server validation
65
- // Reduced from 24 hours to 1 hour to catch auth issues faster
66
- let effectiveLoginTime = this.loginTime;
67
- if (effectiveLoginTime === 0) {
68
- // Restore login time from session if not set (CLI restart scenario)
69
- if (session.login_time) {
70
- effectiveLoginTime = session.login_time.getTime();
71
- this.loginTime = effectiveLoginTime;
72
- }
73
- else {
74
- // Fallback to updated_at if login_time is not available (old sessions)
75
- effectiveLoginTime = session.updated_at.getTime();
76
- this.loginTime = effectiveLoginTime;
77
- }
78
- }
79
- const timeSinceLogin = now - effectiveLoginTime;
80
- const graceMs = 60 * 60 * 1000; // 1 hour instead of 24 hours
81
- this.logger.debug(`[AUTH] Time since login: ${timeSinceLogin}ms (${Math.round(timeSinceLogin / 1000)}s), grace period: ${graceMs}ms`);
82
- this.logger.debug(`[AUTH] Login time: ${new Date(effectiveLoginTime)}, Now: ${new Date(now)}`);
83
- if (timeSinceLogin < graceMs) {
84
- // Within 1-hour grace period after login - skip server validation
85
- this.logger.debug('[AUTH] Within grace period - skipping server validation');
86
- return true;
87
- }
88
- // Use cached validation result if recent enough (15 minutes instead of 1 hour)
89
- const cacheMs = 15 * 60 * 1000; // 15 minutes
90
- if (now - this.lastValidationTime < cacheMs && this.lastValidationResult) {
91
- // Only trust positive cached results, always revalidate failures
92
- return this.lastValidationResult;
93
- }
94
- // Validate with server
95
- const validationResult = await this.validateSessionWithServer(session);
96
- this.lastValidationTime = now;
97
- this.lastValidationResult = validationResult.isValid;
98
- // Update user data if validation returned fresh user info
99
- if (validationResult.user && session.user) {
100
- session.user = validationResult.user;
101
- }
102
- // Only clear session for definitive authentication failures, not temporary issues
103
- if (!validationResult.isValid) {
104
- if (validationResult.shouldClearSession) {
105
- // Clear session only for permanent auth failures (401, 403, invalid token)
106
- await this.clearSession();
107
- return false;
108
- }
109
- else {
110
- // For temporary issues (network errors, 500s, redirects), don't clear session
111
- // Fall back to local session check to be more forgiving
112
- return !this.isSessionExpired(session);
113
- }
114
- }
115
- return true;
116
- }
117
- catch {
118
- // On any error, check if we have a local session that isn't expired
119
- try {
120
- const session = await this.getStoredSession();
121
- return session !== null && !this.isSessionExpired(session);
122
- }
123
- catch {
124
- return false;
125
- }
126
- }
127
- }
128
- async getCurrentUser() {
129
- try {
130
- const session = await this.getStoredSession();
131
- if (!session)
132
- return null;
133
- // First try to get user from stored session
134
- if (session.user && session.user.id && session.user.email) {
135
- return session.user;
136
- }
137
- // If user info is missing or incomplete, decode from JWT
138
- const jwtPayload = decodeJWT(session.sealed_session);
139
- if (!jwtPayload) {
140
- // If we can't decode the JWT, return what we have
141
- return session.user || null;
142
- }
143
- // Extract user info from JWT
144
- const userInfo = extractUserFromJWT(jwtPayload);
145
- // Create a User object from JWT data
146
- const user = {
147
- object: 'user',
148
- id: userInfo.id,
149
- email: userInfo.email,
150
- emailVerified: true, // Assume verified if they have a valid JWT
151
- firstName: userInfo.firstName,
152
- lastName: userInfo.lastName,
153
- profilePictureUrl: '', // Not available in JWT
154
- createdAt: new Date(jwtPayload.iat ? jwtPayload.iat * 1000 : Date.now()).toISOString(),
155
- updatedAt: new Date().toISOString(),
156
- lastSignInAt: new Date().toISOString(),
157
- externalId: null,
158
- metadata: jwtPayload.metadata || {},
159
- };
160
- // Update the stored session with user info from JWT
161
- session.user = user;
162
- await this.storeSession(session);
163
- return user;
164
- }
165
- catch {
166
- return null;
167
- }
168
- }
169
- async hasStoredSession() {
170
- try {
171
- const session = await this.getStoredSession();
172
- return session !== null && !this.isSessionExpired(session);
173
- }
174
- catch {
175
- return false;
176
- }
177
- }
178
- async getStoredSession() {
179
- try {
180
- const sessionData = await credentialStore.getPassword(KEYCHAIN_SERVICE, KEYCHAIN_ACCOUNT);
181
- if (!sessionData)
182
- return null;
183
- const session = JSON.parse(sessionData);
184
- return {
185
- ...session,
186
- created_at: new Date(session.created_at),
187
- updated_at: new Date(session.updated_at),
188
- login_time: session.login_time ? new Date(session.login_time) : undefined,
189
- };
190
- }
191
- catch {
192
- return null;
193
- }
194
- }
195
- async storeSession(session) {
196
- const now = new Date();
197
- // Add login time to session data for persistence across CLI instances
198
- const sessionWithLoginTime = {
199
- ...session,
200
- login_time: now,
201
- };
202
- const sessionData = JSON.stringify(sessionWithLoginTime);
203
- await credentialStore.setPassword(KEYCHAIN_SERVICE, KEYCHAIN_ACCOUNT, sessionData);
204
- // Mark session as valid when we store it and record login time
205
- const nowMs = now.getTime();
206
- this.lastValidationTime = nowMs;
207
- this.lastValidationResult = true;
208
- this.loginTime = nowMs;
209
- }
210
- async clearSession() {
211
- await credentialStore.deletePassword(KEYCHAIN_SERVICE, KEYCHAIN_ACCOUNT);
212
- // Also clear refresh token
213
- await credentialStore.deletePassword(KEYCHAIN_SERVICE, 'refresh-token');
214
- this.refreshTokenValue = undefined;
215
- // Clear the validation cache when session is cleared
216
- this.lastValidationTime = 0;
217
- this.lastValidationResult = false;
218
- }
219
- async handleAuthenticationError() {
220
- // Clear validation cache but don't automatically clear session
221
- // Let the user explicitly re-authenticate if needed
222
- this.lastValidationTime = 0;
223
- this.lastValidationResult = false;
224
- }
225
- /**
226
- * Start login flow for RPC mode - returns auth URL without opening browser
227
- */
228
- async startLoginForRpc() {
229
- try {
230
- // Use OAuth2 Authorization Code Flow with PKCE for authentication
231
- this.oauthHandler = new OAuth2Handler();
232
- // Prepare auth URL without opening browser
233
- const urlResult = await this.oauthHandler.prepareAuthUrl();
234
- return {
235
- authUrl: urlResult.authUrl,
236
- redirectUri: urlResult.redirectUri,
237
- };
238
- }
239
- catch (error) {
240
- if (this.oauthHandler) {
241
- this.oauthHandler.abort();
242
- this.oauthHandler = null;
243
- }
244
- throw new Error(`Failed to start login: ${error}`);
245
- }
246
- }
247
- /**
248
- * Complete login flow for RPC mode - waits for browser callback
249
- */
250
- async completeLoginForRpc() {
251
- if (!this.oauthHandler) {
252
- throw new Error('Must call startLoginForRpc() first');
253
- }
254
- try {
255
- // Wait for OAuth callback and get tokens
256
- const authResult = await this.oauthHandler.completeAuth();
257
- // Process tokens and create session (same as regular login)
258
- return await this.processAuthResult(authResult);
259
- }
260
- catch (error) {
261
- if (this.oauthHandler) {
262
- this.oauthHandler.abort();
263
- this.oauthHandler = null;
264
- }
265
- throw new Error(`Login failed: ${error}`);
266
- }
267
- }
268
- /**
269
- * Process OAuth result and create session
270
- */
271
- async processAuthResult(authResult, gitUser) {
272
- // Store refresh token separately if available
273
- if (authResult.refreshToken) {
274
- this.refreshTokenValue = authResult.refreshToken;
275
- // Store refresh token securely
276
- await credentialStore.setPassword(KEYCHAIN_SERVICE, 'refresh-token', authResult.refreshToken);
277
- }
278
- // Use ID token if available, otherwise use access token
279
- const tokenToProcess = authResult.idToken || authResult.accessToken;
280
- // Extract user info from JWT
281
- const jwtPayload = decodeJWT(tokenToProcess);
282
- if (!jwtPayload) {
283
- throw new Error('Invalid token received - unable to decode');
284
- }
285
- // Extract user info from JWT
286
- const userInfo = extractUserFromJWT(jwtPayload);
287
- // Create user object from JWT data
288
- const user = {
289
- object: 'user',
290
- id: userInfo.id,
291
- email: userInfo.email,
292
- emailVerified: true, // Assume verified if they have a valid JWT
293
- firstName: userInfo.firstName,
294
- lastName: userInfo.lastName,
295
- profilePictureUrl: '', // Not available in JWT
296
- createdAt: new Date(jwtPayload.iat ? jwtPayload.iat * 1000 : Date.now()).toISOString(),
297
- updatedAt: new Date().toISOString(),
298
- lastSignInAt: new Date().toISOString(),
299
- externalId: null,
300
- metadata: jwtPayload.metadata || {},
301
- };
302
- // Store the session
303
- const session = {
304
- user: user,
305
- sealed_session: authResult.accessToken, // Store access token as sealed_session
306
- organization_id: jwtPayload.organization_id || 'default', // Use organization from token or default
307
- created_at: new Date(),
308
- updated_at: new Date(),
309
- login_time: new Date(),
310
- git_user: gitUser, // Store git user info if provided
311
- };
312
- await this.storeSession(session);
313
- return { user, success: true };
314
- }
315
- async login(onAuthUrl, gitUser) {
316
- try {
317
- // Use OAuth2 Authorization Code Flow with PKCE for authentication
318
- this.oauthHandler = new OAuth2Handler();
319
- // Set callback if provided
320
- if (onAuthUrl) {
321
- this.oauthHandler.setAuthUrlCallback(onAuthUrl);
322
- }
323
- const authResult = await this.oauthHandler.authenticate();
324
- // Process auth result and create session
325
- return await this.processAuthResult(authResult, gitUser);
326
- }
327
- catch (error) {
328
- if (this.oauthHandler) {
329
- this.oauthHandler.abort();
330
- this.oauthHandler = null;
331
- }
332
- throw new Error(`Login failed: ${error}`);
333
- }
334
- }
335
- cancelLogin() {
336
- if (this.oauthHandler) {
337
- this.oauthHandler.abort();
338
- this.oauthHandler = null;
339
- }
340
- }
341
- async logout() {
342
- await this.clearSession();
343
- }
344
- async refreshSession() {
345
- try {
346
- const session = await this.getStoredSession();
347
- if (!session) {
348
- this.logger.debug('[AUTH] No session found for refresh');
349
- return false;
350
- }
351
- // Get stored refresh token
352
- let refreshToken = this.refreshTokenValue;
353
- if (!refreshToken) {
354
- refreshToken =
355
- (await credentialStore.getPassword(KEYCHAIN_SERVICE, 'refresh-token')) || undefined;
356
- }
357
- if (!refreshToken) {
358
- // No refresh token available, cannot refresh
359
- this.logger.debug('[AUTH] No refresh token available');
360
- return false;
361
- }
362
- this.logger.debug('[AUTH] Attempting to refresh access token');
363
- // Use OAuth2 handler to refresh the token
364
- const handler = new OAuth2Handler();
365
- const authResult = await handler.refreshToken(refreshToken);
366
- // Update stored refresh token if new one provided
367
- if (authResult.refreshToken && authResult.refreshToken !== refreshToken) {
368
- this.refreshTokenValue = authResult.refreshToken;
369
- await credentialStore.setPassword(KEYCHAIN_SERVICE, 'refresh-token', authResult.refreshToken);
370
- this.logger.debug('[AUTH] Refresh token rotated');
371
- }
372
- // Update session with new access token
373
- session.sealed_session = authResult.accessToken;
374
- session.updated_at = new Date();
375
- await this.storeSession(session);
376
- this.logger.debug('[AUTH] Access token refreshed successfully');
377
- return true;
378
- }
379
- catch (error) {
380
- const errorMsg = error instanceof Error ? error.message : String(error);
381
- this.logger.warn(`[AUTH] Token refresh failed: ${errorMsg}`);
382
- return false;
383
- }
384
- }
385
- async validateSessionWithServer(session) {
386
- try {
387
- this.logger.debug(`[AUTH] Making API call to ${this.baseUrl}/api/v1/auth/validate for session validation`);
388
- // Use the new v1 auth validate endpoint
389
- const response = await axiosWithRetry({
390
- url: `${this.baseUrl}/api/v1/auth/validate`,
391
- method: 'POST',
392
- headers: {
393
- 'Content-Type': 'application/json',
394
- Authorization: `Bearer ${session.sealed_session}`,
395
- },
396
- maxRedirects: 0, // Don't follow redirects
397
- validateStatus: status => status < 500, // Accept all status codes < 500
398
- }, {
399
- maxRetries: 2,
400
- initialDelay: 500,
401
- onRetry: (attempt, delay) => {
402
- console.warn(`Retrying session validation (attempt ${attempt}) after ${delay}ms`);
403
- },
404
- });
405
- this.logger.debug(`[AUTH] API response: status=${response.status}, contentType=${response.headers['content-type']}`);
406
- // Debug response data
407
- if (response.headers['content-type']?.includes('application/json')) {
408
- this.logger.debug('[AUTH] API response data:', {
409
- data: JSON.stringify(response.data).substring(0, 200),
410
- });
411
- }
412
- // Handle redirects (302, 307) - likely temporary, don't clear session
413
- if (response.status === 302 || response.status === 307) {
414
- this.logger.warn(`Session validation received ${response.status} redirect - treating as temporary issue`);
415
- return { isValid: false, shouldClearSession: false };
416
- }
417
- if (response.status === 200) {
418
- // Parse the validation response
419
- const validationData = response.data;
420
- if (validationData.valid === true && validationData.user) {
421
- // Extract user information from the validation response
422
- const user = {
423
- object: 'user',
424
- id: validationData.user.id,
425
- email: validationData.user.email,
426
- emailVerified: true, // Assume verified if they have a valid token
427
- firstName: validationData.user.firstName || '',
428
- lastName: validationData.user.lastName || '',
429
- profilePictureUrl: validationData.user.avatar || '',
430
- createdAt: session.user?.createdAt || new Date().toISOString(),
431
- updatedAt: new Date().toISOString(),
432
- lastSignInAt: new Date().toISOString(),
433
- externalId: null,
434
- metadata: {
435
- username: validationData.user.username,
436
- organizationId: validationData.organization?.id,
437
- organizationName: validationData.organization?.name,
438
- },
439
- };
440
- // Update the stored session with fresh user info
441
- if (session.user?.id !== user.id ||
442
- session.user?.email !== user.email ||
443
- session.user?.firstName !== user.firstName ||
444
- session.user?.lastName !== user.lastName) {
445
- session.user = user;
446
- session.organization_id = validationData.organization?.id || session.organization_id;
447
- await this.storeSession(session);
448
- }
449
- return { isValid: true, shouldClearSession: false, user };
450
- }
451
- else if (validationData.valid === false) {
452
- // Token is explicitly invalid
453
- this.logger.warn('Token validation failed: token is invalid');
454
- return { isValid: false, shouldClearSession: true };
455
- }
456
- // Unexpected response format
457
- this.logger.warn('Unexpected validation response format');
458
- return { isValid: false, shouldClearSession: false };
459
- }
460
- else if (response.status === 401 || response.status === 403) {
461
- // Clear session for definitive authentication failures
462
- this.logger.warn(`Session validation failed: ${response.status} ${response.statusText} - clearing session`);
463
- return { isValid: false, shouldClearSession: true };
464
- }
465
- else {
466
- // For other errors (500, 404, etc.), don't clear session - might be temporary
467
- this.logger.warn(`API error during session validation: ${response.status} - assuming session is valid`);
468
- return { isValid: true, shouldClearSession: false }; // Assume session is still valid, server might be having issues
469
- }
470
- }
471
- catch (error) {
472
- // Network error or API unavailable - don't clear session, might be temporary
473
- this.logger.warn('Network error during session validation - assuming session is valid:', {
474
- error,
475
- });
476
- return { isValid: true, shouldClearSession: false };
477
- }
478
- }
479
- isSessionExpired(session) {
480
- // JWT tokens expire in 1 hour, so we only need to check JWT expiry
481
- return isJWTExpired(session.sealed_session);
482
- }
483
- getUserDisplayName(user) {
484
- if (user.firstName && user.lastName) {
485
- return `${user.firstName} ${user.lastName}`;
486
- }
487
- if (user.firstName) {
488
- return user.firstName;
489
- }
490
- if (user.email) {
491
- return user.email;
492
- }
493
- return 'Unknown User';
494
- }
495
- isUserValid(user) {
496
- return Boolean(user.id && user.email);
497
- }
498
- isSessionValid(session) {
499
- return this.isUserValid(session.user) && Boolean(session.sealed_session);
500
- }
501
- // GitHub token management methods
502
- async getStoredGitHubToken() {
503
- try {
504
- return await credentialStore.getPassword(KEYCHAIN_SERVICE, GITHUB_KEYCHAIN_ACCOUNT);
505
- }
506
- catch {
507
- return null;
508
- }
509
- }
510
- async storeGitHubToken(token) {
511
- if (!token || !token.trim()) {
512
- throw new Error('GitHub token cannot be empty');
513
- }
514
- await credentialStore.setPassword(KEYCHAIN_SERVICE, GITHUB_KEYCHAIN_ACCOUNT, token.trim());
515
- }
516
- async clearGitHubToken() {
517
- await credentialStore.deletePassword(KEYCHAIN_SERVICE, GITHUB_KEYCHAIN_ACCOUNT);
518
- }
519
- async validateGitHubToken(token) {
520
- try {
521
- const tokenToValidate = token || (await this.getStoredGitHubToken());
522
- if (!tokenToValidate) {
523
- return { valid: false };
524
- }
525
- const response = await axios.get('https://api.github.com/user', {
526
- headers: {
527
- Accept: 'application/vnd.github+json',
528
- Authorization: `Bearer ${tokenToValidate}`,
529
- 'X-GitHub-Api-Version': '2022-11-28',
530
- 'User-Agent': 'Braingrid-CLI',
531
- },
532
- });
533
- if (response.status >= 400) {
534
- return { valid: false };
535
- }
536
- const user = response.data;
537
- const scopes = response.headers['x-oauth-scopes']?.split(', ') || [];
538
- return {
539
- valid: true,
540
- user,
541
- scopes,
542
- };
543
- }
544
- catch {
545
- return { valid: false };
546
- }
547
- }
548
- }
549
- //# sourceMappingURL=auth.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/services/auth.ts"],"names":[],"mappings":"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"}
@@ -1,18 +0,0 @@
1
- import { TaskRequest, ClaudeOutput } from '../types/claude.js';
2
- export declare class ClaudeWrapper {
3
- private executablePath;
4
- private workingDir;
5
- private verbose;
6
- private timeout;
7
- constructor(execPath?: string);
8
- setVerbose(verbose: boolean): void;
9
- setWorkingDir(dir: string): void;
10
- setTimeout(timeout: number): void;
11
- execute(args: string[]): Promise<ClaudeOutput>;
12
- executeTask(task: TaskRequest): Promise<ClaudeOutput>;
13
- streamOutput(args: string[], onOutput: (line: string) => void): Promise<void>;
14
- checkInstallation(): Promise<boolean>;
15
- getVersion(): Promise<string>;
16
- private buildTaskArgs;
17
- }
18
- //# sourceMappingURL=claude.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../../src/services/claude.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAE/D,qBAAa,aAAa;IACzB,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,OAAO,CAAS;gBAEZ,QAAQ,GAAE,MAAiB;IAOvC,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAIlC,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAIhC,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI3B,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC;IAuD9C,WAAW,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IAarD,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IA2C7E,iBAAiB,IAAI,OAAO,CAAC,OAAO,CAAC;IASrC,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;IASnC,OAAO,CAAC,aAAa;CAwCrB"}