@symbo.ls/sdk 2.32.2 → 2.32.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.
- package/dist/cjs/config/environment.js +43 -8
- package/dist/cjs/index.js +12 -4
- package/dist/cjs/services/AdminService.js +4 -4
- package/dist/cjs/services/AuthService.js +36 -149
- package/dist/cjs/services/BaseService.js +5 -18
- package/dist/cjs/services/BranchService.js +10 -10
- package/dist/cjs/services/CollabService.js +94 -61
- 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 +45 -35
- package/dist/cjs/services/PullRequestService.js +7 -7
- package/dist/cjs/services/ScreenshotService.js +304 -0
- package/dist/cjs/services/SubscriptionService.js +14 -14
- package/dist/cjs/services/index.js +4 -0
- package/dist/cjs/utils/TokenManager.js +16 -5
- package/dist/cjs/utils/changePreprocessor.js +134 -0
- package/dist/cjs/utils/jsonDiff.js +46 -4
- package/dist/cjs/utils/ordering.js +274 -0
- package/dist/cjs/utils/services.js +14 -1
- package/dist/esm/config/environment.js +43 -8
- package/dist/esm/index.js +1099 -417
- package/dist/esm/services/AdminService.js +68 -35
- package/dist/esm/services/AuthService.js +100 -168
- package/dist/esm/services/BaseService.js +64 -31
- package/dist/esm/services/BranchService.js +74 -41
- package/dist/esm/services/CollabService.js +570 -97
- package/dist/esm/services/CoreService.js +83 -50
- package/dist/esm/services/DnsService.js +68 -35
- package/dist/esm/services/FileService.js +66 -33
- package/dist/esm/services/PaymentService.js +66 -33
- package/dist/esm/services/PlanService.js +76 -43
- package/dist/esm/services/ProjectService.js +547 -66
- package/dist/esm/services/PullRequestService.js +71 -38
- package/dist/esm/services/ScreenshotService.js +992 -0
- package/dist/esm/services/SubscriptionService.js +78 -45
- package/dist/esm/services/index.js +1076 -412
- package/dist/esm/utils/CollabClient.js +89 -12
- package/dist/esm/utils/TokenManager.js +16 -5
- package/dist/esm/utils/changePreprocessor.js +442 -0
- package/dist/esm/utils/jsonDiff.js +46 -4
- package/dist/esm/utils/ordering.js +256 -0
- package/dist/esm/utils/services.js +14 -1
- package/dist/node/config/environment.js +43 -8
- package/dist/node/index.js +14 -5
- package/dist/node/services/AdminService.js +4 -4
- package/dist/node/services/AuthService.js +36 -139
- package/dist/node/services/BaseService.js +5 -18
- package/dist/node/services/BranchService.js +10 -10
- package/dist/node/services/CollabService.js +95 -62
- 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 +45 -35
- package/dist/node/services/PullRequestService.js +7 -7
- package/dist/node/services/ScreenshotService.js +285 -0
- package/dist/node/services/SubscriptionService.js +14 -14
- package/dist/node/services/index.js +4 -0
- package/dist/node/utils/TokenManager.js +16 -5
- package/dist/node/utils/changePreprocessor.js +115 -0
- package/dist/node/utils/jsonDiff.js +46 -4
- package/dist/node/utils/ordering.js +255 -0
- package/dist/node/utils/services.js +14 -1
- package/package.json +7 -6
- package/src/config/environment.js +48 -9
- package/src/index.js +38 -22
- package/src/services/AdminService.js +4 -4
- package/src/services/AuthService.js +42 -175
- package/src/services/BaseService.js +7 -24
- package/src/services/BranchService.js +10 -10
- package/src/services/CollabService.js +115 -74
- 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 +50 -35
- package/src/services/PullRequestService.js +7 -7
- package/src/services/ScreenshotService.js +258 -0
- package/src/services/SubscriptionService.js +14 -14
- package/src/services/index.js +6 -1
- package/src/utils/TokenManager.js +19 -5
- package/src/utils/changePreprocessor.js +139 -0
- package/src/utils/jsonDiff.js +40 -5
- package/src/utils/ordering.js +244 -0
- package/src/utils/services.js +15 -1
|
@@ -1,6 +1,4 @@
|
|
|
1
1
|
import { BaseService } from "./BaseService.js";
|
|
2
|
-
import environment from "../config/environment.js";
|
|
3
|
-
import { getTokenManager } from "../utils/TokenManager.js";
|
|
4
2
|
import {
|
|
5
3
|
ROLE_PERMISSIONS,
|
|
6
4
|
TIER_FEATURES,
|
|
@@ -17,118 +15,10 @@ class AuthService extends BaseService {
|
|
|
17
15
|
"pro2",
|
|
18
16
|
"enterprise"
|
|
19
17
|
]);
|
|
20
|
-
this._initialized = false;
|
|
21
|
-
this._apiUrl = null;
|
|
22
|
-
this._tokenManager = null;
|
|
23
18
|
this._projectRoleCache = /* @__PURE__ */ new Map();
|
|
24
19
|
this._roleCacheExpiry = 5 * 60 * 1e3;
|
|
25
20
|
}
|
|
26
|
-
|
|
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
|
-
}
|
|
21
|
+
// Use BaseService.init/_request/_requireReady implementations
|
|
132
22
|
// ==================== AUTH METHODS ====================
|
|
133
23
|
async register(userData) {
|
|
134
24
|
try {
|
|
@@ -142,7 +32,7 @@ class AuthService extends BaseService {
|
|
|
142
32
|
}
|
|
143
33
|
throw new Error(response.message);
|
|
144
34
|
} catch (error) {
|
|
145
|
-
throw new Error(`Registration failed: ${error.message}
|
|
35
|
+
throw new Error(`Registration failed: ${error.message}`, { cause: error });
|
|
146
36
|
}
|
|
147
37
|
}
|
|
148
38
|
async login(email, password) {
|
|
@@ -164,14 +54,13 @@ class AuthService extends BaseService {
|
|
|
164
54
|
if (this._tokenManager) {
|
|
165
55
|
this._tokenManager.setTokens(tokenData);
|
|
166
56
|
}
|
|
167
|
-
this.updateContext({ authToken: tokens.accessToken });
|
|
168
57
|
}
|
|
169
58
|
if (response.success) {
|
|
170
59
|
return response.data;
|
|
171
60
|
}
|
|
172
61
|
throw new Error(response.message);
|
|
173
62
|
} catch (error) {
|
|
174
|
-
throw new Error(`Login failed: ${error.message}
|
|
63
|
+
throw new Error(`Login failed: ${error.message}`, { cause: error });
|
|
175
64
|
}
|
|
176
65
|
}
|
|
177
66
|
async logout() {
|
|
@@ -184,13 +73,11 @@ class AuthService extends BaseService {
|
|
|
184
73
|
if (this._tokenManager) {
|
|
185
74
|
this._tokenManager.clearTokens();
|
|
186
75
|
}
|
|
187
|
-
this.updateContext({ authToken: null });
|
|
188
76
|
} catch (error) {
|
|
189
77
|
if (this._tokenManager) {
|
|
190
78
|
this._tokenManager.clearTokens();
|
|
191
79
|
}
|
|
192
|
-
|
|
193
|
-
throw new Error(`Logout failed: ${error.message}`);
|
|
80
|
+
throw new Error(`Logout failed: ${error.message}`, { cause: error });
|
|
194
81
|
}
|
|
195
82
|
}
|
|
196
83
|
async refreshToken(refreshToken) {
|
|
@@ -205,7 +92,7 @@ class AuthService extends BaseService {
|
|
|
205
92
|
}
|
|
206
93
|
throw new Error(response.message);
|
|
207
94
|
} catch (error) {
|
|
208
|
-
throw new Error(`Token refresh failed: ${error.message}
|
|
95
|
+
throw new Error(`Token refresh failed: ${error.message}`, { cause: error });
|
|
209
96
|
}
|
|
210
97
|
}
|
|
211
98
|
async googleAuth(idToken, inviteToken = null) {
|
|
@@ -231,14 +118,13 @@ class AuthService extends BaseService {
|
|
|
231
118
|
if (this._tokenManager) {
|
|
232
119
|
this._tokenManager.setTokens(tokenData);
|
|
233
120
|
}
|
|
234
|
-
this.updateContext({ authToken: tokens.accessToken });
|
|
235
121
|
}
|
|
236
122
|
if (response.success) {
|
|
237
123
|
return response.data;
|
|
238
124
|
}
|
|
239
125
|
throw new Error(response.message);
|
|
240
126
|
} catch (error) {
|
|
241
|
-
throw new Error(`Google auth failed: ${error.message}
|
|
127
|
+
throw new Error(`Google auth failed: ${error.message}`, { cause: error });
|
|
242
128
|
}
|
|
243
129
|
}
|
|
244
130
|
async githubAuth(code, inviteToken = null) {
|
|
@@ -264,14 +150,13 @@ class AuthService extends BaseService {
|
|
|
264
150
|
if (this._tokenManager) {
|
|
265
151
|
this._tokenManager.setTokens(tokenData);
|
|
266
152
|
}
|
|
267
|
-
this.updateContext({ authToken: tokens.accessToken });
|
|
268
153
|
}
|
|
269
154
|
if (response.success) {
|
|
270
155
|
return response.data;
|
|
271
156
|
}
|
|
272
157
|
throw new Error(response.message);
|
|
273
158
|
} catch (error) {
|
|
274
|
-
throw new Error(`GitHub auth failed: ${error.message}
|
|
159
|
+
throw new Error(`GitHub auth failed: ${error.message}`, { cause: error });
|
|
275
160
|
}
|
|
276
161
|
}
|
|
277
162
|
async googleAuthCallback(code, redirectUri, inviteToken = null) {
|
|
@@ -297,14 +182,13 @@ class AuthService extends BaseService {
|
|
|
297
182
|
if (this._tokenManager) {
|
|
298
183
|
this._tokenManager.setTokens(tokenData);
|
|
299
184
|
}
|
|
300
|
-
this.updateContext({ authToken: tokens.accessToken });
|
|
301
185
|
}
|
|
302
186
|
if (response.success) {
|
|
303
187
|
return response.data;
|
|
304
188
|
}
|
|
305
189
|
throw new Error(response.message);
|
|
306
190
|
} catch (error) {
|
|
307
|
-
throw new Error(`Google auth callback failed: ${error.message}
|
|
191
|
+
throw new Error(`Google auth callback failed: ${error.message}`, { cause: error });
|
|
308
192
|
}
|
|
309
193
|
}
|
|
310
194
|
async requestPasswordReset(email) {
|
|
@@ -319,7 +203,7 @@ class AuthService extends BaseService {
|
|
|
319
203
|
}
|
|
320
204
|
throw new Error(response.message);
|
|
321
205
|
} catch (error) {
|
|
322
|
-
throw new Error(`Password reset request failed: ${error.message}
|
|
206
|
+
throw new Error(`Password reset request failed: ${error.message}`, { cause: error });
|
|
323
207
|
}
|
|
324
208
|
}
|
|
325
209
|
async confirmPasswordReset(token, password) {
|
|
@@ -334,7 +218,7 @@ class AuthService extends BaseService {
|
|
|
334
218
|
}
|
|
335
219
|
throw new Error(response.message);
|
|
336
220
|
} catch (error) {
|
|
337
|
-
throw new Error(`Password reset confirmation failed: ${error.message}
|
|
221
|
+
throw new Error(`Password reset confirmation failed: ${error.message}`, { cause: error });
|
|
338
222
|
}
|
|
339
223
|
}
|
|
340
224
|
async confirmRegistration(token) {
|
|
@@ -349,7 +233,7 @@ class AuthService extends BaseService {
|
|
|
349
233
|
}
|
|
350
234
|
throw new Error(response.message);
|
|
351
235
|
} catch (error) {
|
|
352
|
-
throw new Error(`Registration confirmation failed: ${error.message}
|
|
236
|
+
throw new Error(`Registration confirmation failed: ${error.message}`, { cause: error });
|
|
353
237
|
}
|
|
354
238
|
}
|
|
355
239
|
async requestPasswordChange() {
|
|
@@ -364,7 +248,7 @@ class AuthService extends BaseService {
|
|
|
364
248
|
}
|
|
365
249
|
throw new Error(response.message);
|
|
366
250
|
} catch (error) {
|
|
367
|
-
throw new Error(`Password change request failed: ${error.message}
|
|
251
|
+
throw new Error(`Password change request failed: ${error.message}`, { cause: error });
|
|
368
252
|
}
|
|
369
253
|
}
|
|
370
254
|
async confirmPasswordChange(currentPassword, newPassword, code) {
|
|
@@ -380,7 +264,7 @@ class AuthService extends BaseService {
|
|
|
380
264
|
}
|
|
381
265
|
throw new Error(response.message);
|
|
382
266
|
} catch (error) {
|
|
383
|
-
throw new Error(`Password change confirmation failed: ${error.message}
|
|
267
|
+
throw new Error(`Password change confirmation failed: ${error.message}`, { cause: error });
|
|
384
268
|
}
|
|
385
269
|
}
|
|
386
270
|
async getMe() {
|
|
@@ -395,7 +279,7 @@ class AuthService extends BaseService {
|
|
|
395
279
|
}
|
|
396
280
|
throw new Error(response.message);
|
|
397
281
|
} catch (error) {
|
|
398
|
-
throw new Error(`Failed to get user profile: ${error.message}
|
|
282
|
+
throw new Error(`Failed to get user profile: ${error.message}`, { cause: error });
|
|
399
283
|
}
|
|
400
284
|
}
|
|
401
285
|
/**
|
|
@@ -495,7 +379,7 @@ class AuthService extends BaseService {
|
|
|
495
379
|
}
|
|
496
380
|
throw new Error(response.message);
|
|
497
381
|
} catch (error) {
|
|
498
|
-
throw new Error(`Failed to get user profile: ${error.message}
|
|
382
|
+
throw new Error(`Failed to get user profile: ${error.message}`, { cause: error });
|
|
499
383
|
}
|
|
500
384
|
}
|
|
501
385
|
async updateUserProfile(profileData) {
|
|
@@ -511,7 +395,7 @@ class AuthService extends BaseService {
|
|
|
511
395
|
}
|
|
512
396
|
throw new Error(response.message);
|
|
513
397
|
} catch (error) {
|
|
514
|
-
throw new Error(`Failed to update user profile: ${error.message}
|
|
398
|
+
throw new Error(`Failed to update user profile: ${error.message}`, { cause: error });
|
|
515
399
|
}
|
|
516
400
|
}
|
|
517
401
|
async getUserProjects() {
|
|
@@ -534,7 +418,7 @@ class AuthService extends BaseService {
|
|
|
534
418
|
}
|
|
535
419
|
throw new Error(response.message);
|
|
536
420
|
} catch (error) {
|
|
537
|
-
throw new Error(`Failed to get user projects: ${error.message}
|
|
421
|
+
throw new Error(`Failed to get user projects: ${error.message}`, { cause: error });
|
|
538
422
|
}
|
|
539
423
|
}
|
|
540
424
|
async getUser(userId) {
|
|
@@ -552,7 +436,7 @@ class AuthService extends BaseService {
|
|
|
552
436
|
}
|
|
553
437
|
throw new Error(response.message);
|
|
554
438
|
} catch (error) {
|
|
555
|
-
throw new Error(`Failed to get user: ${error.message}
|
|
439
|
+
throw new Error(`Failed to get user: ${error.message}`, { cause: error });
|
|
556
440
|
}
|
|
557
441
|
}
|
|
558
442
|
async getUserByEmail(email) {
|
|
@@ -570,7 +454,7 @@ class AuthService extends BaseService {
|
|
|
570
454
|
}
|
|
571
455
|
throw new Error(response.message);
|
|
572
456
|
} catch (error) {
|
|
573
|
-
throw new Error(`Failed to get user by email: ${error.message}
|
|
457
|
+
throw new Error(`Failed to get user by email: ${error.message}`, { cause: error });
|
|
574
458
|
}
|
|
575
459
|
}
|
|
576
460
|
// ==================== PROJECT ROLE METHODS ====================
|
|
@@ -583,6 +467,9 @@ class AuthService extends BaseService {
|
|
|
583
467
|
if (!projectId) {
|
|
584
468
|
throw new Error("Project ID is required");
|
|
585
469
|
}
|
|
470
|
+
if (!this.hasValidTokens()) {
|
|
471
|
+
return "guest";
|
|
472
|
+
}
|
|
586
473
|
const cacheKey = `role_${projectId}`;
|
|
587
474
|
const cached = this._projectRoleCache.get(cacheKey);
|
|
588
475
|
if (cached && Date.now() - cached.timestamp < this._roleCacheExpiry) {
|
|
@@ -603,7 +490,11 @@ class AuthService extends BaseService {
|
|
|
603
490
|
}
|
|
604
491
|
throw new Error(response.message);
|
|
605
492
|
} catch (error) {
|
|
606
|
-
|
|
493
|
+
const message = (error == null ? void 0 : error.message) || "";
|
|
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 });
|
|
607
498
|
}
|
|
608
499
|
}
|
|
609
500
|
/**
|
|
@@ -615,6 +506,9 @@ class AuthService extends BaseService {
|
|
|
615
506
|
if (!projectKey) {
|
|
616
507
|
throw new Error("Project key is required");
|
|
617
508
|
}
|
|
509
|
+
if (!this.hasValidTokens()) {
|
|
510
|
+
return "guest";
|
|
511
|
+
}
|
|
618
512
|
const cacheKey = `role_key_${projectKey}`;
|
|
619
513
|
const cached = this._projectRoleCache.get(cacheKey);
|
|
620
514
|
if (cached && Date.now() - cached.timestamp < this._roleCacheExpiry) {
|
|
@@ -635,7 +529,11 @@ class AuthService extends BaseService {
|
|
|
635
529
|
}
|
|
636
530
|
throw new Error(response.message);
|
|
637
531
|
} catch (error) {
|
|
638
|
-
|
|
532
|
+
const message = (error == null ? void 0 : error.message) || "";
|
|
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 });
|
|
639
537
|
}
|
|
640
538
|
}
|
|
641
539
|
/**
|
|
@@ -738,7 +636,7 @@ class AuthService extends BaseService {
|
|
|
738
636
|
try {
|
|
739
637
|
return await this.getMe();
|
|
740
638
|
} catch (error) {
|
|
741
|
-
throw new Error(`Failed to get current user: ${error.message}
|
|
639
|
+
throw new Error(`Failed to get current user: ${error.message}`, { cause: error });
|
|
742
640
|
}
|
|
743
641
|
}
|
|
744
642
|
/**
|
|
@@ -895,7 +793,6 @@ class AuthService extends BaseService {
|
|
|
895
793
|
this._tokenManager = null;
|
|
896
794
|
}
|
|
897
795
|
this._projectRoleCache.clear();
|
|
898
|
-
this._initialized = false;
|
|
899
796
|
this._setReady(false);
|
|
900
797
|
}
|
|
901
798
|
}
|
|
@@ -19,20 +19,10 @@ 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
|
-
},
|
|
28
22
|
onTokenError: (error) => {
|
|
29
23
|
console.error("Token management error:", error);
|
|
30
24
|
}
|
|
31
25
|
});
|
|
32
|
-
const { authToken } = this._context;
|
|
33
|
-
if (authToken && !this._tokenManager.hasTokens()) {
|
|
34
|
-
this._tokenManager.setTokens({ access_token: authToken });
|
|
35
|
-
}
|
|
36
26
|
this._setReady();
|
|
37
27
|
} catch (error) {
|
|
38
28
|
this._setError(error);
|
|
@@ -41,7 +31,9 @@ class BaseService {
|
|
|
41
31
|
}
|
|
42
32
|
// Update context
|
|
43
33
|
updateContext(context) {
|
|
44
|
-
|
|
34
|
+
if (context && typeof context === "object") {
|
|
35
|
+
Object.assign(this._context, context);
|
|
36
|
+
}
|
|
45
37
|
}
|
|
46
38
|
// Get service status
|
|
47
39
|
getStatus() {
|
|
@@ -96,11 +88,6 @@ class BaseService {
|
|
|
96
88
|
error
|
|
97
89
|
);
|
|
98
90
|
}
|
|
99
|
-
} else if (this._requiresInit(options.methodName)) {
|
|
100
|
-
const { authToken } = this._context;
|
|
101
|
-
if (authToken) {
|
|
102
|
-
defaultHeaders.Authorization = `Bearer ${authToken}`;
|
|
103
|
-
}
|
|
104
91
|
}
|
|
105
92
|
try {
|
|
106
93
|
const response = await fetch(url, {
|
|
@@ -118,11 +105,11 @@ class BaseService {
|
|
|
118
105
|
error = await response.json();
|
|
119
106
|
} catch {
|
|
120
107
|
}
|
|
121
|
-
throw new Error(error.message || error.error || "Request failed");
|
|
108
|
+
throw new Error(error.message || error.error || "Request failed", { cause: error });
|
|
122
109
|
}
|
|
123
110
|
return response.status === 204 ? null : response.json();
|
|
124
111
|
} catch (error) {
|
|
125
|
-
throw new Error(`Request failed: ${error.message}
|
|
112
|
+
throw new Error(`Request failed: ${error.message}`, { cause: error });
|
|
126
113
|
}
|
|
127
114
|
}
|
|
128
115
|
// 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}`, { cause: error });
|
|
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}`, { cause: error });
|
|
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}`, { cause: error });
|
|
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}`, { cause: error });
|
|
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}`, { cause: error });
|
|
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}`, { cause: error });
|
|
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}`, { cause: error });
|
|
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}`, { cause: error });
|
|
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}`, { cause: error });
|
|
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}`, { cause: error });
|
|
358
358
|
}
|
|
359
359
|
}
|
|
360
360
|
/**
|