@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.
Files changed (90) hide show
  1. package/dist/cjs/config/environment.js +43 -8
  2. package/dist/cjs/index.js +12 -4
  3. package/dist/cjs/services/AdminService.js +4 -4
  4. package/dist/cjs/services/AuthService.js +36 -149
  5. package/dist/cjs/services/BaseService.js +5 -18
  6. package/dist/cjs/services/BranchService.js +10 -10
  7. package/dist/cjs/services/CollabService.js +94 -61
  8. package/dist/cjs/services/CoreService.js +19 -19
  9. package/dist/cjs/services/DnsService.js +4 -4
  10. package/dist/cjs/services/FileService.js +2 -2
  11. package/dist/cjs/services/PaymentService.js +2 -2
  12. package/dist/cjs/services/PlanService.js +12 -12
  13. package/dist/cjs/services/ProjectService.js +45 -35
  14. package/dist/cjs/services/PullRequestService.js +7 -7
  15. package/dist/cjs/services/ScreenshotService.js +304 -0
  16. package/dist/cjs/services/SubscriptionService.js +14 -14
  17. package/dist/cjs/services/index.js +4 -0
  18. package/dist/cjs/utils/TokenManager.js +16 -5
  19. package/dist/cjs/utils/changePreprocessor.js +134 -0
  20. package/dist/cjs/utils/jsonDiff.js +46 -4
  21. package/dist/cjs/utils/ordering.js +274 -0
  22. package/dist/cjs/utils/services.js +14 -1
  23. package/dist/esm/config/environment.js +43 -8
  24. package/dist/esm/index.js +1099 -417
  25. package/dist/esm/services/AdminService.js +68 -35
  26. package/dist/esm/services/AuthService.js +100 -168
  27. package/dist/esm/services/BaseService.js +64 -31
  28. package/dist/esm/services/BranchService.js +74 -41
  29. package/dist/esm/services/CollabService.js +570 -97
  30. package/dist/esm/services/CoreService.js +83 -50
  31. package/dist/esm/services/DnsService.js +68 -35
  32. package/dist/esm/services/FileService.js +66 -33
  33. package/dist/esm/services/PaymentService.js +66 -33
  34. package/dist/esm/services/PlanService.js +76 -43
  35. package/dist/esm/services/ProjectService.js +547 -66
  36. package/dist/esm/services/PullRequestService.js +71 -38
  37. package/dist/esm/services/ScreenshotService.js +992 -0
  38. package/dist/esm/services/SubscriptionService.js +78 -45
  39. package/dist/esm/services/index.js +1076 -412
  40. package/dist/esm/utils/CollabClient.js +89 -12
  41. package/dist/esm/utils/TokenManager.js +16 -5
  42. package/dist/esm/utils/changePreprocessor.js +442 -0
  43. package/dist/esm/utils/jsonDiff.js +46 -4
  44. package/dist/esm/utils/ordering.js +256 -0
  45. package/dist/esm/utils/services.js +14 -1
  46. package/dist/node/config/environment.js +43 -8
  47. package/dist/node/index.js +14 -5
  48. package/dist/node/services/AdminService.js +4 -4
  49. package/dist/node/services/AuthService.js +36 -139
  50. package/dist/node/services/BaseService.js +5 -18
  51. package/dist/node/services/BranchService.js +10 -10
  52. package/dist/node/services/CollabService.js +95 -62
  53. package/dist/node/services/CoreService.js +19 -19
  54. package/dist/node/services/DnsService.js +4 -4
  55. package/dist/node/services/FileService.js +2 -2
  56. package/dist/node/services/PaymentService.js +2 -2
  57. package/dist/node/services/PlanService.js +12 -12
  58. package/dist/node/services/ProjectService.js +45 -35
  59. package/dist/node/services/PullRequestService.js +7 -7
  60. package/dist/node/services/ScreenshotService.js +285 -0
  61. package/dist/node/services/SubscriptionService.js +14 -14
  62. package/dist/node/services/index.js +4 -0
  63. package/dist/node/utils/TokenManager.js +16 -5
  64. package/dist/node/utils/changePreprocessor.js +115 -0
  65. package/dist/node/utils/jsonDiff.js +46 -4
  66. package/dist/node/utils/ordering.js +255 -0
  67. package/dist/node/utils/services.js +14 -1
  68. package/package.json +7 -6
  69. package/src/config/environment.js +48 -9
  70. package/src/index.js +38 -22
  71. package/src/services/AdminService.js +4 -4
  72. package/src/services/AuthService.js +42 -175
  73. package/src/services/BaseService.js +7 -24
  74. package/src/services/BranchService.js +10 -10
  75. package/src/services/CollabService.js +115 -74
  76. package/src/services/CoreService.js +19 -19
  77. package/src/services/DnsService.js +4 -4
  78. package/src/services/FileService.js +2 -2
  79. package/src/services/PaymentService.js +2 -2
  80. package/src/services/PlanService.js +12 -12
  81. package/src/services/ProjectService.js +50 -35
  82. package/src/services/PullRequestService.js +7 -7
  83. package/src/services/ScreenshotService.js +258 -0
  84. package/src/services/SubscriptionService.js +14 -14
  85. package/src/services/index.js +6 -1
  86. package/src/utils/TokenManager.js +19 -5
  87. package/src/utils/changePreprocessor.js +139 -0
  88. package/src/utils/jsonDiff.js +40 -5
  89. package/src/utils/ordering.js +244 -0
  90. 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
- 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
- }
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
- this.updateContext({ authToken: null });
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
- throw new Error(`Failed to get project role: ${error.message}`);
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
- throw new Error(`Failed to get project role by key: ${error.message}`);
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
- this._context = { ...this._context, ...context };
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
  /**