@symbo.ls/sdk 2.32.0 → 2.32.2
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.
- package/dist/cjs/config/environment.js +8 -43
- package/dist/cjs/index.js +4 -12
- package/dist/cjs/services/AdminService.js +4 -4
- package/dist/cjs/services/AuthService.js +149 -36
- package/dist/cjs/services/BaseService.js +18 -5
- package/dist/cjs/services/BranchService.js +10 -10
- package/dist/cjs/services/CollabService.js +18 -114
- package/dist/cjs/services/CoreService.js +19 -19
- package/dist/cjs/services/DnsService.js +4 -4
- package/dist/cjs/services/FileService.js +2 -2
- package/dist/cjs/services/PaymentService.js +2 -2
- package/dist/cjs/services/PlanService.js +12 -12
- package/dist/cjs/services/ProjectService.js +34 -39
- package/dist/cjs/services/PullRequestService.js +7 -7
- package/dist/cjs/services/SubscriptionService.js +14 -14
- package/dist/cjs/services/index.js +0 -4
- package/dist/cjs/utils/TokenManager.js +5 -16
- package/dist/cjs/utils/services.js +1 -14
- package/dist/esm/config/environment.js +8 -43
- package/dist/esm/index.js +300 -907
- package/dist/esm/services/AdminService.js +35 -68
- package/dist/esm/services/AuthService.js +168 -100
- package/dist/esm/services/BaseService.js +31 -64
- package/dist/esm/services/BranchService.js +41 -74
- package/dist/esm/services/CollabService.js +50 -452
- package/dist/esm/services/CoreService.js +50 -83
- package/dist/esm/services/DnsService.js +35 -68
- package/dist/esm/services/FileService.js +33 -66
- package/dist/esm/services/PaymentService.js +33 -66
- package/dist/esm/services/PlanService.js +43 -76
- package/dist/esm/services/ProjectService.js +65 -375
- package/dist/esm/services/PullRequestService.js +38 -71
- package/dist/esm/services/SubscriptionService.js +45 -78
- package/dist/esm/services/index.js +295 -884
- package/dist/esm/utils/CollabClient.js +8 -43
- package/dist/esm/utils/TokenManager.js +5 -16
- package/dist/esm/utils/services.js +1 -14
- package/dist/node/config/environment.js +8 -43
- package/dist/node/index.js +5 -14
- package/dist/node/services/AdminService.js +4 -4
- package/dist/node/services/AuthService.js +139 -36
- package/dist/node/services/BaseService.js +18 -5
- package/dist/node/services/BranchService.js +10 -10
- package/dist/node/services/CollabService.js +19 -115
- package/dist/node/services/CoreService.js +19 -19
- package/dist/node/services/DnsService.js +4 -4
- package/dist/node/services/FileService.js +2 -2
- package/dist/node/services/PaymentService.js +2 -2
- package/dist/node/services/PlanService.js +12 -12
- package/dist/node/services/ProjectService.js +34 -39
- package/dist/node/services/PullRequestService.js +7 -7
- package/dist/node/services/SubscriptionService.js +14 -14
- package/dist/node/services/index.js +0 -4
- package/dist/node/utils/TokenManager.js +5 -16
- package/dist/node/utils/services.js +1 -14
- package/package.json +6 -7
- package/src/config/environment.js +9 -48
- package/src/index.js +22 -38
- package/src/services/AdminService.js +4 -4
- package/src/services/AuthService.js +175 -42
- package/src/services/BaseService.js +24 -7
- package/src/services/BranchService.js +10 -10
- package/src/services/CollabService.js +19 -142
- package/src/services/CoreService.js +19 -19
- package/src/services/DnsService.js +4 -4
- package/src/services/FileService.js +2 -2
- package/src/services/PaymentService.js +2 -2
- package/src/services/PlanService.js +12 -12
- package/src/services/ProjectService.js +34 -41
- package/src/services/PullRequestService.js +7 -7
- package/src/services/SubscriptionService.js +14 -14
- package/src/services/index.js +1 -6
- package/src/utils/TokenManager.js +5 -19
- package/src/utils/services.js +1 -15
- package/dist/cjs/services/ScreenshotService.js +0 -304
- package/dist/cjs/utils/ordering.js +0 -295
- package/dist/esm/services/ScreenshotService.js +0 -992
- package/dist/esm/utils/ordering.js +0 -277
- package/dist/node/services/ScreenshotService.js +0 -285
- package/dist/node/utils/ordering.js +0 -276
- package/src/services/ScreenshotService.js +0 -258
- package/src/utils/ordering.js +0 -240
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { BaseService } from './BaseService.js'
|
|
2
|
+
import environment from '../config/environment.js'
|
|
3
|
+
import { getTokenManager } from '../utils/TokenManager.js'
|
|
2
4
|
import {
|
|
3
5
|
ROLE_PERMISSIONS,
|
|
4
6
|
TIER_FEATURES,
|
|
@@ -16,11 +18,147 @@ export class AuthService extends BaseService {
|
|
|
16
18
|
'pro2',
|
|
17
19
|
'enterprise'
|
|
18
20
|
])
|
|
21
|
+
this._initialized = false
|
|
22
|
+
this._apiUrl = null
|
|
23
|
+
this._tokenManager = null
|
|
19
24
|
this._projectRoleCache = new Map() // Cache for project roles
|
|
20
25
|
this._roleCacheExpiry = 5 * 60 * 1000 // 5 minutes cache expiry
|
|
21
26
|
}
|
|
22
27
|
|
|
23
|
-
|
|
28
|
+
init({ context }) {
|
|
29
|
+
try {
|
|
30
|
+
const { appKey, authToken } = context || this._context
|
|
31
|
+
|
|
32
|
+
// Get base URL from environment config
|
|
33
|
+
this._apiUrl = environment.apiUrl
|
|
34
|
+
|
|
35
|
+
if (!this._apiUrl) {
|
|
36
|
+
throw new Error('Auth service base URL not configured')
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// Initialize token manager
|
|
40
|
+
this._tokenManager = getTokenManager({
|
|
41
|
+
apiUrl: this._apiUrl,
|
|
42
|
+
onTokenRefresh: (tokens) => {
|
|
43
|
+
// Update context with new token
|
|
44
|
+
this.updateContext({ authToken: tokens.accessToken })
|
|
45
|
+
},
|
|
46
|
+
onTokenExpired: () => {
|
|
47
|
+
// Clear context token
|
|
48
|
+
this.updateContext({ authToken: null })
|
|
49
|
+
},
|
|
50
|
+
onTokenError: (error) => {
|
|
51
|
+
console.error('Token management error:', error)
|
|
52
|
+
}
|
|
53
|
+
})
|
|
54
|
+
|
|
55
|
+
if (authToken && !this._tokenManager.hasTokens()) {
|
|
56
|
+
this._tokenManager.setTokens({ access_token: authToken })
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// Store masked configuration info
|
|
60
|
+
this._info = {
|
|
61
|
+
config: {
|
|
62
|
+
apiUrl: this._apiUrl,
|
|
63
|
+
appKey: appKey
|
|
64
|
+
? `${appKey.substr(0, 4)}...${appKey.substr(-4)}`
|
|
65
|
+
: null,
|
|
66
|
+
hasToken: Boolean(authToken)
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
this._initialized = true
|
|
71
|
+
this._setReady()
|
|
72
|
+
} catch (error) {
|
|
73
|
+
this._setError(error)
|
|
74
|
+
throw error
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// Helper method to make HTTP requests
|
|
79
|
+
async _request(endpoint, options = {}) {
|
|
80
|
+
const url = `${this._apiUrl}/core${endpoint}`
|
|
81
|
+
|
|
82
|
+
const defaultHeaders = {}
|
|
83
|
+
|
|
84
|
+
// Only set Content-Type for JSON requests, not for FormData
|
|
85
|
+
if (!(options.body instanceof FormData)) {
|
|
86
|
+
defaultHeaders['Content-Type'] = 'application/json'
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
// Use TokenManager for automatic token management
|
|
90
|
+
if (this._requiresInit(options.methodName) && this._tokenManager) {
|
|
91
|
+
try {
|
|
92
|
+
// Ensure we have a valid token (will refresh if needed)
|
|
93
|
+
const validToken = await this._tokenManager.ensureValidToken()
|
|
94
|
+
|
|
95
|
+
if (validToken) {
|
|
96
|
+
const authHeader = this._tokenManager.getAuthHeader()
|
|
97
|
+
if (authHeader) {
|
|
98
|
+
defaultHeaders.Authorization = authHeader
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
} catch (error) {
|
|
102
|
+
console.warn(
|
|
103
|
+
'Token management failed, proceeding without authentication:',
|
|
104
|
+
error
|
|
105
|
+
)
|
|
106
|
+
}
|
|
107
|
+
} else if (this._requiresInit(options.methodName)) {
|
|
108
|
+
// Fallback to context token if TokenManager not available
|
|
109
|
+
const { authToken } = this._context
|
|
110
|
+
if (authToken) {
|
|
111
|
+
defaultHeaders.Authorization = `Bearer ${authToken}`
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
try {
|
|
116
|
+
const response = await fetch(url, {
|
|
117
|
+
...options,
|
|
118
|
+
headers: {
|
|
119
|
+
...defaultHeaders,
|
|
120
|
+
...options.headers
|
|
121
|
+
}
|
|
122
|
+
})
|
|
123
|
+
|
|
124
|
+
if (!response.ok) {
|
|
125
|
+
let error = {
|
|
126
|
+
message: `HTTP ${response.status}: ${response.statusText}`
|
|
127
|
+
}
|
|
128
|
+
try {
|
|
129
|
+
error = await response.json()
|
|
130
|
+
} catch {
|
|
131
|
+
// Use default error message
|
|
132
|
+
}
|
|
133
|
+
throw new Error(error.message || error.error || 'Request failed')
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
return response.status === 204 ? null : response.json()
|
|
137
|
+
} catch (error) {
|
|
138
|
+
throw new Error(`Request failed: ${error.message}`)
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
_requiresInit(methodName) {
|
|
143
|
+
const noInitMethods = new Set([
|
|
144
|
+
'register',
|
|
145
|
+
'login',
|
|
146
|
+
'googleAuth',
|
|
147
|
+
'googleAuthCallback',
|
|
148
|
+
'githubAuth',
|
|
149
|
+
'requestPasswordReset',
|
|
150
|
+
'confirmPasswordReset',
|
|
151
|
+
'confirmRegistration',
|
|
152
|
+
'verifyEmail'
|
|
153
|
+
])
|
|
154
|
+
return !noInitMethods.has(methodName)
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
_requireReady(methodName) {
|
|
158
|
+
if (this._requiresInit(methodName) && !this._initialized) {
|
|
159
|
+
throw new Error('Auth service not initialized')
|
|
160
|
+
}
|
|
161
|
+
}
|
|
24
162
|
|
|
25
163
|
// ==================== AUTH METHODS ====================
|
|
26
164
|
|
|
@@ -36,7 +174,7 @@ export class AuthService extends BaseService {
|
|
|
36
174
|
}
|
|
37
175
|
throw new Error(response.message)
|
|
38
176
|
} catch (error) {
|
|
39
|
-
throw new Error(`Registration failed: ${error.message}
|
|
177
|
+
throw new Error(`Registration failed: ${error.message}`)
|
|
40
178
|
}
|
|
41
179
|
}
|
|
42
180
|
|
|
@@ -62,6 +200,9 @@ export class AuthService extends BaseService {
|
|
|
62
200
|
if (this._tokenManager) {
|
|
63
201
|
this._tokenManager.setTokens(tokenData)
|
|
64
202
|
}
|
|
203
|
+
|
|
204
|
+
// Update context for backward compatibility
|
|
205
|
+
this.updateContext({ authToken: tokens.accessToken })
|
|
65
206
|
}
|
|
66
207
|
|
|
67
208
|
if (response.success) {
|
|
@@ -69,7 +210,7 @@ export class AuthService extends BaseService {
|
|
|
69
210
|
}
|
|
70
211
|
throw new Error(response.message)
|
|
71
212
|
} catch (error) {
|
|
72
|
-
throw new Error(`Login failed: ${error.message}
|
|
213
|
+
throw new Error(`Login failed: ${error.message}`)
|
|
73
214
|
}
|
|
74
215
|
}
|
|
75
216
|
|
|
@@ -86,13 +227,15 @@ export class AuthService extends BaseService {
|
|
|
86
227
|
if (this._tokenManager) {
|
|
87
228
|
this._tokenManager.clearTokens()
|
|
88
229
|
}
|
|
230
|
+
this.updateContext({ authToken: null })
|
|
89
231
|
} catch (error) {
|
|
90
232
|
// Even if the API call fails, clear local tokens
|
|
91
233
|
if (this._tokenManager) {
|
|
92
234
|
this._tokenManager.clearTokens()
|
|
93
235
|
}
|
|
236
|
+
this.updateContext({ authToken: null })
|
|
94
237
|
|
|
95
|
-
throw new Error(`Logout failed: ${error.message}
|
|
238
|
+
throw new Error(`Logout failed: ${error.message}`)
|
|
96
239
|
}
|
|
97
240
|
}
|
|
98
241
|
|
|
@@ -108,7 +251,7 @@ export class AuthService extends BaseService {
|
|
|
108
251
|
}
|
|
109
252
|
throw new Error(response.message)
|
|
110
253
|
} catch (error) {
|
|
111
|
-
throw new Error(`Token refresh failed: ${error.message}
|
|
254
|
+
throw new Error(`Token refresh failed: ${error.message}`)
|
|
112
255
|
}
|
|
113
256
|
}
|
|
114
257
|
|
|
@@ -139,6 +282,9 @@ export class AuthService extends BaseService {
|
|
|
139
282
|
if (this._tokenManager) {
|
|
140
283
|
this._tokenManager.setTokens(tokenData)
|
|
141
284
|
}
|
|
285
|
+
|
|
286
|
+
// Update context for backward compatibility
|
|
287
|
+
this.updateContext({ authToken: tokens.accessToken })
|
|
142
288
|
}
|
|
143
289
|
|
|
144
290
|
if (response.success) {
|
|
@@ -146,7 +292,7 @@ export class AuthService extends BaseService {
|
|
|
146
292
|
}
|
|
147
293
|
throw new Error(response.message)
|
|
148
294
|
} catch (error) {
|
|
149
|
-
throw new Error(`Google auth failed: ${error.message}
|
|
295
|
+
throw new Error(`Google auth failed: ${error.message}`)
|
|
150
296
|
}
|
|
151
297
|
}
|
|
152
298
|
|
|
@@ -177,6 +323,9 @@ export class AuthService extends BaseService {
|
|
|
177
323
|
if (this._tokenManager) {
|
|
178
324
|
this._tokenManager.setTokens(tokenData)
|
|
179
325
|
}
|
|
326
|
+
|
|
327
|
+
// Update context for backward compatibility
|
|
328
|
+
this.updateContext({ authToken: tokens.accessToken })
|
|
180
329
|
}
|
|
181
330
|
|
|
182
331
|
if (response.success) {
|
|
@@ -184,7 +333,7 @@ export class AuthService extends BaseService {
|
|
|
184
333
|
}
|
|
185
334
|
throw new Error(response.message)
|
|
186
335
|
} catch (error) {
|
|
187
|
-
throw new Error(`GitHub auth failed: ${error.message}
|
|
336
|
+
throw new Error(`GitHub auth failed: ${error.message}`)
|
|
188
337
|
}
|
|
189
338
|
}
|
|
190
339
|
|
|
@@ -215,6 +364,9 @@ export class AuthService extends BaseService {
|
|
|
215
364
|
if (this._tokenManager) {
|
|
216
365
|
this._tokenManager.setTokens(tokenData)
|
|
217
366
|
}
|
|
367
|
+
|
|
368
|
+
// Update context for backward compatibility
|
|
369
|
+
this.updateContext({ authToken: tokens.accessToken })
|
|
218
370
|
}
|
|
219
371
|
|
|
220
372
|
if (response.success) {
|
|
@@ -222,7 +374,7 @@ export class AuthService extends BaseService {
|
|
|
222
374
|
}
|
|
223
375
|
throw new Error(response.message)
|
|
224
376
|
} catch (error) {
|
|
225
|
-
throw new Error(`Google auth callback failed: ${error.message}
|
|
377
|
+
throw new Error(`Google auth callback failed: ${error.message}`)
|
|
226
378
|
}
|
|
227
379
|
}
|
|
228
380
|
|
|
@@ -238,7 +390,7 @@ export class AuthService extends BaseService {
|
|
|
238
390
|
}
|
|
239
391
|
throw new Error(response.message)
|
|
240
392
|
} catch (error) {
|
|
241
|
-
throw new Error(`Password reset request failed: ${error.message}
|
|
393
|
+
throw new Error(`Password reset request failed: ${error.message}`)
|
|
242
394
|
}
|
|
243
395
|
}
|
|
244
396
|
|
|
@@ -254,7 +406,7 @@ export class AuthService extends BaseService {
|
|
|
254
406
|
}
|
|
255
407
|
throw new Error(response.message)
|
|
256
408
|
} catch (error) {
|
|
257
|
-
throw new Error(`Password reset confirmation failed: ${error.message}
|
|
409
|
+
throw new Error(`Password reset confirmation failed: ${error.message}`)
|
|
258
410
|
}
|
|
259
411
|
}
|
|
260
412
|
|
|
@@ -270,7 +422,7 @@ export class AuthService extends BaseService {
|
|
|
270
422
|
}
|
|
271
423
|
throw new Error(response.message)
|
|
272
424
|
} catch (error) {
|
|
273
|
-
throw new Error(`Registration confirmation failed: ${error.message}
|
|
425
|
+
throw new Error(`Registration confirmation failed: ${error.message}`)
|
|
274
426
|
}
|
|
275
427
|
}
|
|
276
428
|
|
|
@@ -286,7 +438,7 @@ export class AuthService extends BaseService {
|
|
|
286
438
|
}
|
|
287
439
|
throw new Error(response.message)
|
|
288
440
|
} catch (error) {
|
|
289
|
-
throw new Error(`Password change request failed: ${error.message}
|
|
441
|
+
throw new Error(`Password change request failed: ${error.message}`)
|
|
290
442
|
}
|
|
291
443
|
}
|
|
292
444
|
|
|
@@ -303,7 +455,7 @@ export class AuthService extends BaseService {
|
|
|
303
455
|
}
|
|
304
456
|
throw new Error(response.message)
|
|
305
457
|
} catch (error) {
|
|
306
|
-
throw new Error(`Password change confirmation failed: ${error.message}
|
|
458
|
+
throw new Error(`Password change confirmation failed: ${error.message}`)
|
|
307
459
|
}
|
|
308
460
|
}
|
|
309
461
|
|
|
@@ -319,7 +471,7 @@ export class AuthService extends BaseService {
|
|
|
319
471
|
}
|
|
320
472
|
throw new Error(response.message)
|
|
321
473
|
} catch (error) {
|
|
322
|
-
throw new Error(`Failed to get user profile: ${error.message}
|
|
474
|
+
throw new Error(`Failed to get user profile: ${error.message}`)
|
|
323
475
|
}
|
|
324
476
|
}
|
|
325
477
|
|
|
@@ -443,7 +595,7 @@ export class AuthService extends BaseService {
|
|
|
443
595
|
}
|
|
444
596
|
throw new Error(response.message)
|
|
445
597
|
} catch (error) {
|
|
446
|
-
throw new Error(`Failed to get user profile: ${error.message}
|
|
598
|
+
throw new Error(`Failed to get user profile: ${error.message}`)
|
|
447
599
|
}
|
|
448
600
|
}
|
|
449
601
|
|
|
@@ -460,7 +612,7 @@ export class AuthService extends BaseService {
|
|
|
460
612
|
}
|
|
461
613
|
throw new Error(response.message)
|
|
462
614
|
} catch (error) {
|
|
463
|
-
throw new Error(`Failed to update user profile: ${error.message}
|
|
615
|
+
throw new Error(`Failed to update user profile: ${error.message}`)
|
|
464
616
|
}
|
|
465
617
|
}
|
|
466
618
|
|
|
@@ -484,7 +636,7 @@ export class AuthService extends BaseService {
|
|
|
484
636
|
}
|
|
485
637
|
throw new Error(response.message)
|
|
486
638
|
} catch (error) {
|
|
487
|
-
throw new Error(`Failed to get user projects: ${error.message}
|
|
639
|
+
throw new Error(`Failed to get user projects: ${error.message}`)
|
|
488
640
|
}
|
|
489
641
|
}
|
|
490
642
|
|
|
@@ -503,7 +655,7 @@ export class AuthService extends BaseService {
|
|
|
503
655
|
}
|
|
504
656
|
throw new Error(response.message)
|
|
505
657
|
} catch (error) {
|
|
506
|
-
throw new Error(`Failed to get user: ${error.message}
|
|
658
|
+
throw new Error(`Failed to get user: ${error.message}`)
|
|
507
659
|
}
|
|
508
660
|
}
|
|
509
661
|
|
|
@@ -522,7 +674,7 @@ export class AuthService extends BaseService {
|
|
|
522
674
|
}
|
|
523
675
|
throw new Error(response.message)
|
|
524
676
|
} catch (error) {
|
|
525
|
-
throw new Error(`Failed to get user by email: ${error.message}
|
|
677
|
+
throw new Error(`Failed to get user by email: ${error.message}`)
|
|
526
678
|
}
|
|
527
679
|
}
|
|
528
680
|
|
|
@@ -538,11 +690,6 @@ export class AuthService extends BaseService {
|
|
|
538
690
|
throw new Error('Project ID is required')
|
|
539
691
|
}
|
|
540
692
|
|
|
541
|
-
// If there are no valid tokens, treat user as guest for public access
|
|
542
|
-
if (!this.hasValidTokens()) {
|
|
543
|
-
return 'guest'
|
|
544
|
-
}
|
|
545
|
-
|
|
546
693
|
// Check cache first
|
|
547
694
|
const cacheKey = `role_${projectId}`
|
|
548
695
|
const cached = this._projectRoleCache.get(cacheKey)
|
|
@@ -568,12 +715,7 @@ export class AuthService extends BaseService {
|
|
|
568
715
|
}
|
|
569
716
|
throw new Error(response.message)
|
|
570
717
|
} catch (error) {
|
|
571
|
-
|
|
572
|
-
// If request failed due to missing/invalid auth, default to guest
|
|
573
|
-
if (/401|403|unauthorized|no token|invalid token/iu.test(message)) {
|
|
574
|
-
return 'guest'
|
|
575
|
-
}
|
|
576
|
-
throw new Error(`Failed to get project role: ${message}`, { cause: error })
|
|
718
|
+
throw new Error(`Failed to get project role: ${error.message}`)
|
|
577
719
|
}
|
|
578
720
|
}
|
|
579
721
|
|
|
@@ -587,11 +729,6 @@ export class AuthService extends BaseService {
|
|
|
587
729
|
throw new Error('Project key is required')
|
|
588
730
|
}
|
|
589
731
|
|
|
590
|
-
// If there are no valid tokens, treat user as guest for public access
|
|
591
|
-
if (!this.hasValidTokens()) {
|
|
592
|
-
return 'guest'
|
|
593
|
-
}
|
|
594
|
-
|
|
595
732
|
// Check cache first
|
|
596
733
|
const cacheKey = `role_key_${projectKey}`
|
|
597
734
|
const cached = this._projectRoleCache.get(cacheKey)
|
|
@@ -617,12 +754,7 @@ export class AuthService extends BaseService {
|
|
|
617
754
|
}
|
|
618
755
|
throw new Error(response.message)
|
|
619
756
|
} catch (error) {
|
|
620
|
-
|
|
621
|
-
// If request failed due to missing/invalid auth, default to guest
|
|
622
|
-
if (/401|403|unauthorized|no token|invalid token/iu.test(message)) {
|
|
623
|
-
return 'guest'
|
|
624
|
-
}
|
|
625
|
-
throw new Error(`Failed to get project role by key: ${message}`, { cause: error })
|
|
757
|
+
throw new Error(`Failed to get project role by key: ${error.message}`)
|
|
626
758
|
}
|
|
627
759
|
}
|
|
628
760
|
|
|
@@ -750,7 +882,7 @@ export class AuthService extends BaseService {
|
|
|
750
882
|
try {
|
|
751
883
|
return await this.getMe()
|
|
752
884
|
} catch (error) {
|
|
753
|
-
throw new Error(`Failed to get current user: ${error.message}
|
|
885
|
+
throw new Error(`Failed to get current user: ${error.message}`)
|
|
754
886
|
}
|
|
755
887
|
}
|
|
756
888
|
|
|
@@ -950,6 +1082,7 @@ export class AuthService extends BaseService {
|
|
|
950
1082
|
}
|
|
951
1083
|
// Clear project role cache
|
|
952
1084
|
this._projectRoleCache.clear()
|
|
1085
|
+
this._initialized = false
|
|
953
1086
|
this._setReady(false)
|
|
954
1087
|
}
|
|
955
1088
|
}
|
|
@@ -23,14 +23,28 @@ export class BaseService {
|
|
|
23
23
|
throw new Error('Service base URL not configured')
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
-
// Initialize token manager
|
|
26
|
+
// Initialize token manager
|
|
27
27
|
this._tokenManager = getTokenManager({
|
|
28
28
|
apiUrl: this._apiUrl,
|
|
29
|
+
onTokenRefresh: tokens => {
|
|
30
|
+
// Update context with new token
|
|
31
|
+
this.updateContext({ authToken: tokens.accessToken })
|
|
32
|
+
},
|
|
33
|
+
onTokenExpired: () => {
|
|
34
|
+
// Clear context token
|
|
35
|
+
this.updateContext({ authToken: null })
|
|
36
|
+
},
|
|
29
37
|
onTokenError: error => {
|
|
30
38
|
console.error('Token management error:', error)
|
|
31
39
|
}
|
|
32
40
|
})
|
|
33
41
|
|
|
42
|
+
// Set initial token if provided
|
|
43
|
+
const { authToken } = this._context
|
|
44
|
+
if (authToken && !this._tokenManager.hasTokens()) {
|
|
45
|
+
this._tokenManager.setTokens({ access_token: authToken })
|
|
46
|
+
}
|
|
47
|
+
|
|
34
48
|
this._setReady()
|
|
35
49
|
} catch (error) {
|
|
36
50
|
this._setError(error)
|
|
@@ -40,10 +54,7 @@ export class BaseService {
|
|
|
40
54
|
|
|
41
55
|
// Update context
|
|
42
56
|
updateContext (context) {
|
|
43
|
-
|
|
44
|
-
if (context && typeof context === 'object') {
|
|
45
|
-
Object.assign(this._context, context)
|
|
46
|
-
}
|
|
57
|
+
this._context = { ...this._context, ...context }
|
|
47
58
|
}
|
|
48
59
|
|
|
49
60
|
// Get service status
|
|
@@ -112,6 +123,12 @@ export class BaseService {
|
|
|
112
123
|
error
|
|
113
124
|
)
|
|
114
125
|
}
|
|
126
|
+
} else if (this._requiresInit(options.methodName)) {
|
|
127
|
+
// Fallback to context token if TokenManager not available
|
|
128
|
+
const { authToken } = this._context
|
|
129
|
+
if (authToken) {
|
|
130
|
+
defaultHeaders.Authorization = `Bearer ${authToken}`
|
|
131
|
+
}
|
|
115
132
|
}
|
|
116
133
|
|
|
117
134
|
try {
|
|
@@ -132,12 +149,12 @@ export class BaseService {
|
|
|
132
149
|
} catch {
|
|
133
150
|
// Use default error message
|
|
134
151
|
}
|
|
135
|
-
throw new Error(error.message || error.error || 'Request failed'
|
|
152
|
+
throw new Error(error.message || error.error || 'Request failed')
|
|
136
153
|
}
|
|
137
154
|
|
|
138
155
|
return response.status === 204 ? null : response.json()
|
|
139
156
|
} catch (error) {
|
|
140
|
-
throw new Error(`Request failed: ${error.message}
|
|
157
|
+
throw new Error(`Request failed: ${error.message}`)
|
|
141
158
|
}
|
|
142
159
|
}
|
|
143
160
|
|
|
@@ -22,7 +22,7 @@ export class BranchService extends BaseService {
|
|
|
22
22
|
}
|
|
23
23
|
throw new Error(response.message)
|
|
24
24
|
} catch (error) {
|
|
25
|
-
throw new Error(`Failed to list branches: ${error.message}
|
|
25
|
+
throw new Error(`Failed to list branches: ${error.message}`)
|
|
26
26
|
}
|
|
27
27
|
}
|
|
28
28
|
|
|
@@ -51,7 +51,7 @@ export class BranchService extends BaseService {
|
|
|
51
51
|
}
|
|
52
52
|
throw new Error(response.message)
|
|
53
53
|
} catch (error) {
|
|
54
|
-
throw new Error(`Failed to create branch: ${error.message}
|
|
54
|
+
throw new Error(`Failed to create branch: ${error.message}`)
|
|
55
55
|
}
|
|
56
56
|
}
|
|
57
57
|
|
|
@@ -83,7 +83,7 @@ export class BranchService extends BaseService {
|
|
|
83
83
|
}
|
|
84
84
|
throw new Error(response.message)
|
|
85
85
|
} catch (error) {
|
|
86
|
-
throw new Error(`Failed to delete branch: ${error.message}
|
|
86
|
+
throw new Error(`Failed to delete branch: ${error.message}`)
|
|
87
87
|
}
|
|
88
88
|
}
|
|
89
89
|
|
|
@@ -121,7 +121,7 @@ export class BranchService extends BaseService {
|
|
|
121
121
|
}
|
|
122
122
|
throw new Error(response.message)
|
|
123
123
|
} catch (error) {
|
|
124
|
-
throw new Error(`Failed to rename branch: ${error.message}
|
|
124
|
+
throw new Error(`Failed to rename branch: ${error.message}`)
|
|
125
125
|
}
|
|
126
126
|
}
|
|
127
127
|
|
|
@@ -165,7 +165,7 @@ export class BranchService extends BaseService {
|
|
|
165
165
|
}
|
|
166
166
|
throw new Error(response.message)
|
|
167
167
|
} catch (error) {
|
|
168
|
-
throw new Error(`Failed to get branch changes: ${error.message}
|
|
168
|
+
throw new Error(`Failed to get branch changes: ${error.message}`)
|
|
169
169
|
}
|
|
170
170
|
}
|
|
171
171
|
|
|
@@ -220,7 +220,7 @@ export class BranchService extends BaseService {
|
|
|
220
220
|
) {
|
|
221
221
|
throw new Error(`Merge conflicts detected: ${error.message}`)
|
|
222
222
|
}
|
|
223
|
-
throw new Error(`Failed to merge branch: ${error.message}
|
|
223
|
+
throw new Error(`Failed to merge branch: ${error.message}`)
|
|
224
224
|
}
|
|
225
225
|
}
|
|
226
226
|
|
|
@@ -251,7 +251,7 @@ export class BranchService extends BaseService {
|
|
|
251
251
|
}
|
|
252
252
|
throw new Error(response.message)
|
|
253
253
|
} catch (error) {
|
|
254
|
-
throw new Error(`Failed to reset branch: ${error.message}
|
|
254
|
+
throw new Error(`Failed to reset branch: ${error.message}`)
|
|
255
255
|
}
|
|
256
256
|
}
|
|
257
257
|
|
|
@@ -280,7 +280,7 @@ export class BranchService extends BaseService {
|
|
|
280
280
|
}
|
|
281
281
|
throw new Error(response.message)
|
|
282
282
|
} catch (error) {
|
|
283
|
-
throw new Error(`Failed to publish version: ${error.message}
|
|
283
|
+
throw new Error(`Failed to publish version: ${error.message}`)
|
|
284
284
|
}
|
|
285
285
|
}
|
|
286
286
|
|
|
@@ -322,7 +322,7 @@ export class BranchService extends BaseService {
|
|
|
322
322
|
const branches = await this.listBranches(projectId)
|
|
323
323
|
return branches?.data?.includes(branchName) || false
|
|
324
324
|
} catch (error) {
|
|
325
|
-
throw new Error(`Failed to check if branch exists: ${error.message}
|
|
325
|
+
throw new Error(`Failed to check if branch exists: ${error.message}`)
|
|
326
326
|
}
|
|
327
327
|
}
|
|
328
328
|
|
|
@@ -405,7 +405,7 @@ export class BranchService extends BaseService {
|
|
|
405
405
|
canRename: exists && branchName !== 'main'
|
|
406
406
|
}
|
|
407
407
|
} catch (error) {
|
|
408
|
-
throw new Error(`Failed to get branch status: ${error.message}
|
|
408
|
+
throw new Error(`Failed to get branch status: ${error.message}`)
|
|
409
409
|
}
|
|
410
410
|
}
|
|
411
411
|
|