@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,
|
|
@@ -15,10 +17,118 @@ class AuthService extends BaseService {
|
|
|
15
17
|
"pro2",
|
|
16
18
|
"enterprise"
|
|
17
19
|
]);
|
|
20
|
+
this._initialized = false;
|
|
21
|
+
this._apiUrl = null;
|
|
22
|
+
this._tokenManager = null;
|
|
18
23
|
this._projectRoleCache = /* @__PURE__ */ new Map();
|
|
19
24
|
this._roleCacheExpiry = 5 * 60 * 1e3;
|
|
20
25
|
}
|
|
21
|
-
|
|
26
|
+
init({ context }) {
|
|
27
|
+
try {
|
|
28
|
+
const { appKey, authToken } = context || this._context;
|
|
29
|
+
this._apiUrl = environment.apiUrl;
|
|
30
|
+
if (!this._apiUrl) {
|
|
31
|
+
throw new Error("Auth service base URL not configured");
|
|
32
|
+
}
|
|
33
|
+
this._tokenManager = getTokenManager({
|
|
34
|
+
apiUrl: this._apiUrl,
|
|
35
|
+
onTokenRefresh: (tokens) => {
|
|
36
|
+
this.updateContext({ authToken: tokens.accessToken });
|
|
37
|
+
},
|
|
38
|
+
onTokenExpired: () => {
|
|
39
|
+
this.updateContext({ authToken: null });
|
|
40
|
+
},
|
|
41
|
+
onTokenError: (error) => {
|
|
42
|
+
console.error("Token management error:", error);
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
if (authToken && !this._tokenManager.hasTokens()) {
|
|
46
|
+
this._tokenManager.setTokens({ access_token: authToken });
|
|
47
|
+
}
|
|
48
|
+
this._info = {
|
|
49
|
+
config: {
|
|
50
|
+
apiUrl: this._apiUrl,
|
|
51
|
+
appKey: appKey ? `${appKey.substr(0, 4)}...${appKey.substr(-4)}` : null,
|
|
52
|
+
hasToken: Boolean(authToken)
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
this._initialized = true;
|
|
56
|
+
this._setReady();
|
|
57
|
+
} catch (error) {
|
|
58
|
+
this._setError(error);
|
|
59
|
+
throw error;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
// Helper method to make HTTP requests
|
|
63
|
+
async _request(endpoint, options = {}) {
|
|
64
|
+
const url = `${this._apiUrl}/core${endpoint}`;
|
|
65
|
+
const defaultHeaders = {};
|
|
66
|
+
if (!(options.body instanceof FormData)) {
|
|
67
|
+
defaultHeaders["Content-Type"] = "application/json";
|
|
68
|
+
}
|
|
69
|
+
if (this._requiresInit(options.methodName) && this._tokenManager) {
|
|
70
|
+
try {
|
|
71
|
+
const validToken = await this._tokenManager.ensureValidToken();
|
|
72
|
+
if (validToken) {
|
|
73
|
+
const authHeader = this._tokenManager.getAuthHeader();
|
|
74
|
+
if (authHeader) {
|
|
75
|
+
defaultHeaders.Authorization = authHeader;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
} catch (error) {
|
|
79
|
+
console.warn(
|
|
80
|
+
"Token management failed, proceeding without authentication:",
|
|
81
|
+
error
|
|
82
|
+
);
|
|
83
|
+
}
|
|
84
|
+
} else if (this._requiresInit(options.methodName)) {
|
|
85
|
+
const { authToken } = this._context;
|
|
86
|
+
if (authToken) {
|
|
87
|
+
defaultHeaders.Authorization = `Bearer ${authToken}`;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
try {
|
|
91
|
+
const response = await fetch(url, {
|
|
92
|
+
...options,
|
|
93
|
+
headers: {
|
|
94
|
+
...defaultHeaders,
|
|
95
|
+
...options.headers
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
if (!response.ok) {
|
|
99
|
+
let error = {
|
|
100
|
+
message: `HTTP ${response.status}: ${response.statusText}`
|
|
101
|
+
};
|
|
102
|
+
try {
|
|
103
|
+
error = await response.json();
|
|
104
|
+
} catch {
|
|
105
|
+
}
|
|
106
|
+
throw new Error(error.message || error.error || "Request failed");
|
|
107
|
+
}
|
|
108
|
+
return response.status === 204 ? null : response.json();
|
|
109
|
+
} catch (error) {
|
|
110
|
+
throw new Error(`Request failed: ${error.message}`);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
_requiresInit(methodName) {
|
|
114
|
+
const noInitMethods = /* @__PURE__ */ new Set([
|
|
115
|
+
"register",
|
|
116
|
+
"login",
|
|
117
|
+
"googleAuth",
|
|
118
|
+
"googleAuthCallback",
|
|
119
|
+
"githubAuth",
|
|
120
|
+
"requestPasswordReset",
|
|
121
|
+
"confirmPasswordReset",
|
|
122
|
+
"confirmRegistration",
|
|
123
|
+
"verifyEmail"
|
|
124
|
+
]);
|
|
125
|
+
return !noInitMethods.has(methodName);
|
|
126
|
+
}
|
|
127
|
+
_requireReady(methodName) {
|
|
128
|
+
if (this._requiresInit(methodName) && !this._initialized) {
|
|
129
|
+
throw new Error("Auth service not initialized");
|
|
130
|
+
}
|
|
131
|
+
}
|
|
22
132
|
// ==================== AUTH METHODS ====================
|
|
23
133
|
async register(userData) {
|
|
24
134
|
try {
|
|
@@ -32,7 +142,7 @@ class AuthService extends BaseService {
|
|
|
32
142
|
}
|
|
33
143
|
throw new Error(response.message);
|
|
34
144
|
} catch (error) {
|
|
35
|
-
throw new Error(`Registration failed: ${error.message}
|
|
145
|
+
throw new Error(`Registration failed: ${error.message}`);
|
|
36
146
|
}
|
|
37
147
|
}
|
|
38
148
|
async login(email, password) {
|
|
@@ -54,13 +164,14 @@ class AuthService extends BaseService {
|
|
|
54
164
|
if (this._tokenManager) {
|
|
55
165
|
this._tokenManager.setTokens(tokenData);
|
|
56
166
|
}
|
|
167
|
+
this.updateContext({ authToken: tokens.accessToken });
|
|
57
168
|
}
|
|
58
169
|
if (response.success) {
|
|
59
170
|
return response.data;
|
|
60
171
|
}
|
|
61
172
|
throw new Error(response.message);
|
|
62
173
|
} catch (error) {
|
|
63
|
-
throw new Error(`Login failed: ${error.message}
|
|
174
|
+
throw new Error(`Login failed: ${error.message}`);
|
|
64
175
|
}
|
|
65
176
|
}
|
|
66
177
|
async logout() {
|
|
@@ -73,11 +184,13 @@ class AuthService extends BaseService {
|
|
|
73
184
|
if (this._tokenManager) {
|
|
74
185
|
this._tokenManager.clearTokens();
|
|
75
186
|
}
|
|
187
|
+
this.updateContext({ authToken: null });
|
|
76
188
|
} catch (error) {
|
|
77
189
|
if (this._tokenManager) {
|
|
78
190
|
this._tokenManager.clearTokens();
|
|
79
191
|
}
|
|
80
|
-
|
|
192
|
+
this.updateContext({ authToken: null });
|
|
193
|
+
throw new Error(`Logout failed: ${error.message}`);
|
|
81
194
|
}
|
|
82
195
|
}
|
|
83
196
|
async refreshToken(refreshToken) {
|
|
@@ -92,7 +205,7 @@ class AuthService extends BaseService {
|
|
|
92
205
|
}
|
|
93
206
|
throw new Error(response.message);
|
|
94
207
|
} catch (error) {
|
|
95
|
-
throw new Error(`Token refresh failed: ${error.message}
|
|
208
|
+
throw new Error(`Token refresh failed: ${error.message}`);
|
|
96
209
|
}
|
|
97
210
|
}
|
|
98
211
|
async googleAuth(idToken, inviteToken = null) {
|
|
@@ -118,13 +231,14 @@ class AuthService extends BaseService {
|
|
|
118
231
|
if (this._tokenManager) {
|
|
119
232
|
this._tokenManager.setTokens(tokenData);
|
|
120
233
|
}
|
|
234
|
+
this.updateContext({ authToken: tokens.accessToken });
|
|
121
235
|
}
|
|
122
236
|
if (response.success) {
|
|
123
237
|
return response.data;
|
|
124
238
|
}
|
|
125
239
|
throw new Error(response.message);
|
|
126
240
|
} catch (error) {
|
|
127
|
-
throw new Error(`Google auth failed: ${error.message}
|
|
241
|
+
throw new Error(`Google auth failed: ${error.message}`);
|
|
128
242
|
}
|
|
129
243
|
}
|
|
130
244
|
async githubAuth(code, inviteToken = null) {
|
|
@@ -150,13 +264,14 @@ class AuthService extends BaseService {
|
|
|
150
264
|
if (this._tokenManager) {
|
|
151
265
|
this._tokenManager.setTokens(tokenData);
|
|
152
266
|
}
|
|
267
|
+
this.updateContext({ authToken: tokens.accessToken });
|
|
153
268
|
}
|
|
154
269
|
if (response.success) {
|
|
155
270
|
return response.data;
|
|
156
271
|
}
|
|
157
272
|
throw new Error(response.message);
|
|
158
273
|
} catch (error) {
|
|
159
|
-
throw new Error(`GitHub auth failed: ${error.message}
|
|
274
|
+
throw new Error(`GitHub auth failed: ${error.message}`);
|
|
160
275
|
}
|
|
161
276
|
}
|
|
162
277
|
async googleAuthCallback(code, redirectUri, inviteToken = null) {
|
|
@@ -182,13 +297,14 @@ class AuthService extends BaseService {
|
|
|
182
297
|
if (this._tokenManager) {
|
|
183
298
|
this._tokenManager.setTokens(tokenData);
|
|
184
299
|
}
|
|
300
|
+
this.updateContext({ authToken: tokens.accessToken });
|
|
185
301
|
}
|
|
186
302
|
if (response.success) {
|
|
187
303
|
return response.data;
|
|
188
304
|
}
|
|
189
305
|
throw new Error(response.message);
|
|
190
306
|
} catch (error) {
|
|
191
|
-
throw new Error(`Google auth callback failed: ${error.message}
|
|
307
|
+
throw new Error(`Google auth callback failed: ${error.message}`);
|
|
192
308
|
}
|
|
193
309
|
}
|
|
194
310
|
async requestPasswordReset(email) {
|
|
@@ -203,7 +319,7 @@ class AuthService extends BaseService {
|
|
|
203
319
|
}
|
|
204
320
|
throw new Error(response.message);
|
|
205
321
|
} catch (error) {
|
|
206
|
-
throw new Error(`Password reset request failed: ${error.message}
|
|
322
|
+
throw new Error(`Password reset request failed: ${error.message}`);
|
|
207
323
|
}
|
|
208
324
|
}
|
|
209
325
|
async confirmPasswordReset(token, password) {
|
|
@@ -218,7 +334,7 @@ class AuthService extends BaseService {
|
|
|
218
334
|
}
|
|
219
335
|
throw new Error(response.message);
|
|
220
336
|
} catch (error) {
|
|
221
|
-
throw new Error(`Password reset confirmation failed: ${error.message}
|
|
337
|
+
throw new Error(`Password reset confirmation failed: ${error.message}`);
|
|
222
338
|
}
|
|
223
339
|
}
|
|
224
340
|
async confirmRegistration(token) {
|
|
@@ -233,7 +349,7 @@ class AuthService extends BaseService {
|
|
|
233
349
|
}
|
|
234
350
|
throw new Error(response.message);
|
|
235
351
|
} catch (error) {
|
|
236
|
-
throw new Error(`Registration confirmation failed: ${error.message}
|
|
352
|
+
throw new Error(`Registration confirmation failed: ${error.message}`);
|
|
237
353
|
}
|
|
238
354
|
}
|
|
239
355
|
async requestPasswordChange() {
|
|
@@ -248,7 +364,7 @@ class AuthService extends BaseService {
|
|
|
248
364
|
}
|
|
249
365
|
throw new Error(response.message);
|
|
250
366
|
} catch (error) {
|
|
251
|
-
throw new Error(`Password change request failed: ${error.message}
|
|
367
|
+
throw new Error(`Password change request failed: ${error.message}`);
|
|
252
368
|
}
|
|
253
369
|
}
|
|
254
370
|
async confirmPasswordChange(currentPassword, newPassword, code) {
|
|
@@ -264,7 +380,7 @@ class AuthService extends BaseService {
|
|
|
264
380
|
}
|
|
265
381
|
throw new Error(response.message);
|
|
266
382
|
} catch (error) {
|
|
267
|
-
throw new Error(`Password change confirmation failed: ${error.message}
|
|
383
|
+
throw new Error(`Password change confirmation failed: ${error.message}`);
|
|
268
384
|
}
|
|
269
385
|
}
|
|
270
386
|
async getMe() {
|
|
@@ -279,7 +395,7 @@ class AuthService extends BaseService {
|
|
|
279
395
|
}
|
|
280
396
|
throw new Error(response.message);
|
|
281
397
|
} catch (error) {
|
|
282
|
-
throw new Error(`Failed to get user profile: ${error.message}
|
|
398
|
+
throw new Error(`Failed to get user profile: ${error.message}`);
|
|
283
399
|
}
|
|
284
400
|
}
|
|
285
401
|
/**
|
|
@@ -379,7 +495,7 @@ class AuthService extends BaseService {
|
|
|
379
495
|
}
|
|
380
496
|
throw new Error(response.message);
|
|
381
497
|
} catch (error) {
|
|
382
|
-
throw new Error(`Failed to get user profile: ${error.message}
|
|
498
|
+
throw new Error(`Failed to get user profile: ${error.message}`);
|
|
383
499
|
}
|
|
384
500
|
}
|
|
385
501
|
async updateUserProfile(profileData) {
|
|
@@ -395,7 +511,7 @@ class AuthService extends BaseService {
|
|
|
395
511
|
}
|
|
396
512
|
throw new Error(response.message);
|
|
397
513
|
} catch (error) {
|
|
398
|
-
throw new Error(`Failed to update user profile: ${error.message}
|
|
514
|
+
throw new Error(`Failed to update user profile: ${error.message}`);
|
|
399
515
|
}
|
|
400
516
|
}
|
|
401
517
|
async getUserProjects() {
|
|
@@ -418,7 +534,7 @@ class AuthService extends BaseService {
|
|
|
418
534
|
}
|
|
419
535
|
throw new Error(response.message);
|
|
420
536
|
} catch (error) {
|
|
421
|
-
throw new Error(`Failed to get user projects: ${error.message}
|
|
537
|
+
throw new Error(`Failed to get user projects: ${error.message}`);
|
|
422
538
|
}
|
|
423
539
|
}
|
|
424
540
|
async getUser(userId) {
|
|
@@ -436,7 +552,7 @@ class AuthService extends BaseService {
|
|
|
436
552
|
}
|
|
437
553
|
throw new Error(response.message);
|
|
438
554
|
} catch (error) {
|
|
439
|
-
throw new Error(`Failed to get user: ${error.message}
|
|
555
|
+
throw new Error(`Failed to get user: ${error.message}`);
|
|
440
556
|
}
|
|
441
557
|
}
|
|
442
558
|
async getUserByEmail(email) {
|
|
@@ -454,7 +570,7 @@ class AuthService extends BaseService {
|
|
|
454
570
|
}
|
|
455
571
|
throw new Error(response.message);
|
|
456
572
|
} catch (error) {
|
|
457
|
-
throw new Error(`Failed to get user by email: ${error.message}
|
|
573
|
+
throw new Error(`Failed to get user by email: ${error.message}`);
|
|
458
574
|
}
|
|
459
575
|
}
|
|
460
576
|
// ==================== PROJECT ROLE METHODS ====================
|
|
@@ -467,9 +583,6 @@ class AuthService extends BaseService {
|
|
|
467
583
|
if (!projectId) {
|
|
468
584
|
throw new Error("Project ID is required");
|
|
469
585
|
}
|
|
470
|
-
if (!this.hasValidTokens()) {
|
|
471
|
-
return "guest";
|
|
472
|
-
}
|
|
473
586
|
const cacheKey = `role_${projectId}`;
|
|
474
587
|
const cached = this._projectRoleCache.get(cacheKey);
|
|
475
588
|
if (cached && Date.now() - cached.timestamp < this._roleCacheExpiry) {
|
|
@@ -490,11 +603,7 @@ class AuthService extends BaseService {
|
|
|
490
603
|
}
|
|
491
604
|
throw new Error(response.message);
|
|
492
605
|
} catch (error) {
|
|
493
|
-
|
|
494
|
-
if (/401|403|unauthorized|no token|invalid token/iu.test(message)) {
|
|
495
|
-
return "guest";
|
|
496
|
-
}
|
|
497
|
-
throw new Error(`Failed to get project role: ${message}`, { cause: error });
|
|
606
|
+
throw new Error(`Failed to get project role: ${error.message}`);
|
|
498
607
|
}
|
|
499
608
|
}
|
|
500
609
|
/**
|
|
@@ -506,9 +615,6 @@ class AuthService extends BaseService {
|
|
|
506
615
|
if (!projectKey) {
|
|
507
616
|
throw new Error("Project key is required");
|
|
508
617
|
}
|
|
509
|
-
if (!this.hasValidTokens()) {
|
|
510
|
-
return "guest";
|
|
511
|
-
}
|
|
512
618
|
const cacheKey = `role_key_${projectKey}`;
|
|
513
619
|
const cached = this._projectRoleCache.get(cacheKey);
|
|
514
620
|
if (cached && Date.now() - cached.timestamp < this._roleCacheExpiry) {
|
|
@@ -529,11 +635,7 @@ class AuthService extends BaseService {
|
|
|
529
635
|
}
|
|
530
636
|
throw new Error(response.message);
|
|
531
637
|
} catch (error) {
|
|
532
|
-
|
|
533
|
-
if (/401|403|unauthorized|no token|invalid token/iu.test(message)) {
|
|
534
|
-
return "guest";
|
|
535
|
-
}
|
|
536
|
-
throw new Error(`Failed to get project role by key: ${message}`, { cause: error });
|
|
638
|
+
throw new Error(`Failed to get project role by key: ${error.message}`);
|
|
537
639
|
}
|
|
538
640
|
}
|
|
539
641
|
/**
|
|
@@ -636,7 +738,7 @@ class AuthService extends BaseService {
|
|
|
636
738
|
try {
|
|
637
739
|
return await this.getMe();
|
|
638
740
|
} catch (error) {
|
|
639
|
-
throw new Error(`Failed to get current user: ${error.message}
|
|
741
|
+
throw new Error(`Failed to get current user: ${error.message}`);
|
|
640
742
|
}
|
|
641
743
|
}
|
|
642
744
|
/**
|
|
@@ -793,6 +895,7 @@ class AuthService extends BaseService {
|
|
|
793
895
|
this._tokenManager = null;
|
|
794
896
|
}
|
|
795
897
|
this._projectRoleCache.clear();
|
|
898
|
+
this._initialized = false;
|
|
796
899
|
this._setReady(false);
|
|
797
900
|
}
|
|
798
901
|
}
|
|
@@ -19,10 +19,20 @@ class BaseService {
|
|
|
19
19
|
}
|
|
20
20
|
this._tokenManager = getTokenManager({
|
|
21
21
|
apiUrl: this._apiUrl,
|
|
22
|
+
onTokenRefresh: (tokens) => {
|
|
23
|
+
this.updateContext({ authToken: tokens.accessToken });
|
|
24
|
+
},
|
|
25
|
+
onTokenExpired: () => {
|
|
26
|
+
this.updateContext({ authToken: null });
|
|
27
|
+
},
|
|
22
28
|
onTokenError: (error) => {
|
|
23
29
|
console.error("Token management error:", error);
|
|
24
30
|
}
|
|
25
31
|
});
|
|
32
|
+
const { authToken } = this._context;
|
|
33
|
+
if (authToken && !this._tokenManager.hasTokens()) {
|
|
34
|
+
this._tokenManager.setTokens({ access_token: authToken });
|
|
35
|
+
}
|
|
26
36
|
this._setReady();
|
|
27
37
|
} catch (error) {
|
|
28
38
|
this._setError(error);
|
|
@@ -31,9 +41,7 @@ class BaseService {
|
|
|
31
41
|
}
|
|
32
42
|
// Update context
|
|
33
43
|
updateContext(context) {
|
|
34
|
-
|
|
35
|
-
Object.assign(this._context, context);
|
|
36
|
-
}
|
|
44
|
+
this._context = { ...this._context, ...context };
|
|
37
45
|
}
|
|
38
46
|
// Get service status
|
|
39
47
|
getStatus() {
|
|
@@ -88,6 +96,11 @@ class BaseService {
|
|
|
88
96
|
error
|
|
89
97
|
);
|
|
90
98
|
}
|
|
99
|
+
} else if (this._requiresInit(options.methodName)) {
|
|
100
|
+
const { authToken } = this._context;
|
|
101
|
+
if (authToken) {
|
|
102
|
+
defaultHeaders.Authorization = `Bearer ${authToken}`;
|
|
103
|
+
}
|
|
91
104
|
}
|
|
92
105
|
try {
|
|
93
106
|
const response = await fetch(url, {
|
|
@@ -105,11 +118,11 @@ class BaseService {
|
|
|
105
118
|
error = await response.json();
|
|
106
119
|
} catch {
|
|
107
120
|
}
|
|
108
|
-
throw new Error(error.message || error.error || "Request failed"
|
|
121
|
+
throw new Error(error.message || error.error || "Request failed");
|
|
109
122
|
}
|
|
110
123
|
return response.status === 204 ? null : response.json();
|
|
111
124
|
} catch (error) {
|
|
112
|
-
throw new Error(`Request failed: ${error.message}
|
|
125
|
+
throw new Error(`Request failed: ${error.message}`);
|
|
113
126
|
}
|
|
114
127
|
}
|
|
115
128
|
// Helper method to determine if a method requires initialization
|
|
@@ -19,7 +19,7 @@ class BranchService extends BaseService {
|
|
|
19
19
|
}
|
|
20
20
|
throw new Error(response.message);
|
|
21
21
|
} catch (error) {
|
|
22
|
-
throw new Error(`Failed to list branches: ${error.message}
|
|
22
|
+
throw new Error(`Failed to list branches: ${error.message}`);
|
|
23
23
|
}
|
|
24
24
|
}
|
|
25
25
|
/**
|
|
@@ -45,7 +45,7 @@ class BranchService extends BaseService {
|
|
|
45
45
|
}
|
|
46
46
|
throw new Error(response.message);
|
|
47
47
|
} catch (error) {
|
|
48
|
-
throw new Error(`Failed to create branch: ${error.message}
|
|
48
|
+
throw new Error(`Failed to create branch: ${error.message}`);
|
|
49
49
|
}
|
|
50
50
|
}
|
|
51
51
|
/**
|
|
@@ -75,7 +75,7 @@ class BranchService extends BaseService {
|
|
|
75
75
|
}
|
|
76
76
|
throw new Error(response.message);
|
|
77
77
|
} catch (error) {
|
|
78
|
-
throw new Error(`Failed to delete branch: ${error.message}
|
|
78
|
+
throw new Error(`Failed to delete branch: ${error.message}`);
|
|
79
79
|
}
|
|
80
80
|
}
|
|
81
81
|
/**
|
|
@@ -111,7 +111,7 @@ class BranchService extends BaseService {
|
|
|
111
111
|
}
|
|
112
112
|
throw new Error(response.message);
|
|
113
113
|
} catch (error) {
|
|
114
|
-
throw new Error(`Failed to rename branch: ${error.message}
|
|
114
|
+
throw new Error(`Failed to rename branch: ${error.message}`);
|
|
115
115
|
}
|
|
116
116
|
}
|
|
117
117
|
/**
|
|
@@ -150,7 +150,7 @@ class BranchService extends BaseService {
|
|
|
150
150
|
}
|
|
151
151
|
throw new Error(response.message);
|
|
152
152
|
} catch (error) {
|
|
153
|
-
throw new Error(`Failed to get branch changes: ${error.message}
|
|
153
|
+
throw new Error(`Failed to get branch changes: ${error.message}`);
|
|
154
154
|
}
|
|
155
155
|
}
|
|
156
156
|
/**
|
|
@@ -197,7 +197,7 @@ class BranchService extends BaseService {
|
|
|
197
197
|
if (error.message.includes("conflicts") || error.message.includes("409")) {
|
|
198
198
|
throw new Error(`Merge conflicts detected: ${error.message}`);
|
|
199
199
|
}
|
|
200
|
-
throw new Error(`Failed to merge branch: ${error.message}
|
|
200
|
+
throw new Error(`Failed to merge branch: ${error.message}`);
|
|
201
201
|
}
|
|
202
202
|
}
|
|
203
203
|
/**
|
|
@@ -226,7 +226,7 @@ class BranchService extends BaseService {
|
|
|
226
226
|
}
|
|
227
227
|
throw new Error(response.message);
|
|
228
228
|
} catch (error) {
|
|
229
|
-
throw new Error(`Failed to reset branch: ${error.message}
|
|
229
|
+
throw new Error(`Failed to reset branch: ${error.message}`);
|
|
230
230
|
}
|
|
231
231
|
}
|
|
232
232
|
/**
|
|
@@ -252,7 +252,7 @@ class BranchService extends BaseService {
|
|
|
252
252
|
}
|
|
253
253
|
throw new Error(response.message);
|
|
254
254
|
} catch (error) {
|
|
255
|
-
throw new Error(`Failed to publish version: ${error.message}
|
|
255
|
+
throw new Error(`Failed to publish version: ${error.message}`);
|
|
256
256
|
}
|
|
257
257
|
}
|
|
258
258
|
// ==================== BRANCH HELPER METHODS ====================
|
|
@@ -284,7 +284,7 @@ class BranchService extends BaseService {
|
|
|
284
284
|
const branches = await this.listBranches(projectId);
|
|
285
285
|
return ((_a = branches == null ? void 0 : branches.data) == null ? void 0 : _a.includes(branchName)) || false;
|
|
286
286
|
} catch (error) {
|
|
287
|
-
throw new Error(`Failed to check if branch exists: ${error.message}
|
|
287
|
+
throw new Error(`Failed to check if branch exists: ${error.message}`);
|
|
288
288
|
}
|
|
289
289
|
}
|
|
290
290
|
/**
|
|
@@ -354,7 +354,7 @@ class BranchService extends BaseService {
|
|
|
354
354
|
canRename: exists && branchName !== "main"
|
|
355
355
|
};
|
|
356
356
|
} catch (error) {
|
|
357
|
-
throw new Error(`Failed to get branch status: ${error.message}
|
|
357
|
+
throw new Error(`Failed to get branch status: ${error.message}`);
|
|
358
358
|
}
|
|
359
359
|
}
|
|
360
360
|
/**
|