@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,
@@ -18,147 +16,11 @@ export class AuthService extends BaseService {
18
16
  'pro2',
19
17
  'enterprise'
20
18
  ])
21
- this._initialized = false
22
- this._apiUrl = null
23
- this._tokenManager = null
24
19
  this._projectRoleCache = new Map() // Cache for project roles
25
20
  this._roleCacheExpiry = 5 * 60 * 1000 // 5 minutes cache expiry
26
21
  }
27
22
 
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
- }
23
+ // Use BaseService.init/_request/_requireReady implementations
162
24
 
163
25
  // ==================== AUTH METHODS ====================
164
26
 
@@ -174,7 +36,7 @@ export class AuthService extends BaseService {
174
36
  }
175
37
  throw new Error(response.message)
176
38
  } catch (error) {
177
- throw new Error(`Registration failed: ${error.message}`)
39
+ throw new Error(`Registration failed: ${error.message}`, { cause: error })
178
40
  }
179
41
  }
180
42
 
@@ -200,9 +62,6 @@ export class AuthService extends BaseService {
200
62
  if (this._tokenManager) {
201
63
  this._tokenManager.setTokens(tokenData)
202
64
  }
203
-
204
- // Update context for backward compatibility
205
- this.updateContext({ authToken: tokens.accessToken })
206
65
  }
207
66
 
208
67
  if (response.success) {
@@ -210,7 +69,7 @@ export class AuthService extends BaseService {
210
69
  }
211
70
  throw new Error(response.message)
212
71
  } catch (error) {
213
- throw new Error(`Login failed: ${error.message}`)
72
+ throw new Error(`Login failed: ${error.message}`, { cause: error })
214
73
  }
215
74
  }
216
75
 
@@ -227,15 +86,13 @@ export class AuthService extends BaseService {
227
86
  if (this._tokenManager) {
228
87
  this._tokenManager.clearTokens()
229
88
  }
230
- this.updateContext({ authToken: null })
231
89
  } catch (error) {
232
90
  // Even if the API call fails, clear local tokens
233
91
  if (this._tokenManager) {
234
92
  this._tokenManager.clearTokens()
235
93
  }
236
- this.updateContext({ authToken: null })
237
94
 
238
- throw new Error(`Logout failed: ${error.message}`)
95
+ throw new Error(`Logout failed: ${error.message}`, { cause: error })
239
96
  }
240
97
  }
241
98
 
@@ -251,7 +108,7 @@ export class AuthService extends BaseService {
251
108
  }
252
109
  throw new Error(response.message)
253
110
  } catch (error) {
254
- throw new Error(`Token refresh failed: ${error.message}`)
111
+ throw new Error(`Token refresh failed: ${error.message}`, { cause: error })
255
112
  }
256
113
  }
257
114
 
@@ -282,9 +139,6 @@ export class AuthService extends BaseService {
282
139
  if (this._tokenManager) {
283
140
  this._tokenManager.setTokens(tokenData)
284
141
  }
285
-
286
- // Update context for backward compatibility
287
- this.updateContext({ authToken: tokens.accessToken })
288
142
  }
289
143
 
290
144
  if (response.success) {
@@ -292,7 +146,7 @@ export class AuthService extends BaseService {
292
146
  }
293
147
  throw new Error(response.message)
294
148
  } catch (error) {
295
- throw new Error(`Google auth failed: ${error.message}`)
149
+ throw new Error(`Google auth failed: ${error.message}`, { cause: error })
296
150
  }
297
151
  }
298
152
 
@@ -323,9 +177,6 @@ export class AuthService extends BaseService {
323
177
  if (this._tokenManager) {
324
178
  this._tokenManager.setTokens(tokenData)
325
179
  }
326
-
327
- // Update context for backward compatibility
328
- this.updateContext({ authToken: tokens.accessToken })
329
180
  }
330
181
 
331
182
  if (response.success) {
@@ -333,7 +184,7 @@ export class AuthService extends BaseService {
333
184
  }
334
185
  throw new Error(response.message)
335
186
  } catch (error) {
336
- throw new Error(`GitHub auth failed: ${error.message}`)
187
+ throw new Error(`GitHub auth failed: ${error.message}`, { cause: error })
337
188
  }
338
189
  }
339
190
 
@@ -364,9 +215,6 @@ export class AuthService extends BaseService {
364
215
  if (this._tokenManager) {
365
216
  this._tokenManager.setTokens(tokenData)
366
217
  }
367
-
368
- // Update context for backward compatibility
369
- this.updateContext({ authToken: tokens.accessToken })
370
218
  }
371
219
 
372
220
  if (response.success) {
@@ -374,7 +222,7 @@ export class AuthService extends BaseService {
374
222
  }
375
223
  throw new Error(response.message)
376
224
  } catch (error) {
377
- throw new Error(`Google auth callback failed: ${error.message}`)
225
+ throw new Error(`Google auth callback failed: ${error.message}`, { cause: error })
378
226
  }
379
227
  }
380
228
 
@@ -390,7 +238,7 @@ export class AuthService extends BaseService {
390
238
  }
391
239
  throw new Error(response.message)
392
240
  } catch (error) {
393
- throw new Error(`Password reset request failed: ${error.message}`)
241
+ throw new Error(`Password reset request failed: ${error.message}`, { cause: error })
394
242
  }
395
243
  }
396
244
 
@@ -406,7 +254,7 @@ export class AuthService extends BaseService {
406
254
  }
407
255
  throw new Error(response.message)
408
256
  } catch (error) {
409
- throw new Error(`Password reset confirmation failed: ${error.message}`)
257
+ throw new Error(`Password reset confirmation failed: ${error.message}`, { cause: error })
410
258
  }
411
259
  }
412
260
 
@@ -422,7 +270,7 @@ export class AuthService extends BaseService {
422
270
  }
423
271
  throw new Error(response.message)
424
272
  } catch (error) {
425
- throw new Error(`Registration confirmation failed: ${error.message}`)
273
+ throw new Error(`Registration confirmation failed: ${error.message}`, { cause: error })
426
274
  }
427
275
  }
428
276
 
@@ -438,7 +286,7 @@ export class AuthService extends BaseService {
438
286
  }
439
287
  throw new Error(response.message)
440
288
  } catch (error) {
441
- throw new Error(`Password change request failed: ${error.message}`)
289
+ throw new Error(`Password change request failed: ${error.message}`, { cause: error })
442
290
  }
443
291
  }
444
292
 
@@ -455,7 +303,7 @@ export class AuthService extends BaseService {
455
303
  }
456
304
  throw new Error(response.message)
457
305
  } catch (error) {
458
- throw new Error(`Password change confirmation failed: ${error.message}`)
306
+ throw new Error(`Password change confirmation failed: ${error.message}`, { cause: error })
459
307
  }
460
308
  }
461
309
 
@@ -471,7 +319,7 @@ export class AuthService extends BaseService {
471
319
  }
472
320
  throw new Error(response.message)
473
321
  } catch (error) {
474
- throw new Error(`Failed to get user profile: ${error.message}`)
322
+ throw new Error(`Failed to get user profile: ${error.message}`, { cause: error })
475
323
  }
476
324
  }
477
325
 
@@ -595,7 +443,7 @@ export class AuthService extends BaseService {
595
443
  }
596
444
  throw new Error(response.message)
597
445
  } catch (error) {
598
- throw new Error(`Failed to get user profile: ${error.message}`)
446
+ throw new Error(`Failed to get user profile: ${error.message}`, { cause: error })
599
447
  }
600
448
  }
601
449
 
@@ -612,7 +460,7 @@ export class AuthService extends BaseService {
612
460
  }
613
461
  throw new Error(response.message)
614
462
  } catch (error) {
615
- throw new Error(`Failed to update user profile: ${error.message}`)
463
+ throw new Error(`Failed to update user profile: ${error.message}`, { cause: error })
616
464
  }
617
465
  }
618
466
 
@@ -636,7 +484,7 @@ export class AuthService extends BaseService {
636
484
  }
637
485
  throw new Error(response.message)
638
486
  } catch (error) {
639
- throw new Error(`Failed to get user projects: ${error.message}`)
487
+ throw new Error(`Failed to get user projects: ${error.message}`, { cause: error })
640
488
  }
641
489
  }
642
490
 
@@ -655,7 +503,7 @@ export class AuthService extends BaseService {
655
503
  }
656
504
  throw new Error(response.message)
657
505
  } catch (error) {
658
- throw new Error(`Failed to get user: ${error.message}`)
506
+ throw new Error(`Failed to get user: ${error.message}`, { cause: error })
659
507
  }
660
508
  }
661
509
 
@@ -674,7 +522,7 @@ export class AuthService extends BaseService {
674
522
  }
675
523
  throw new Error(response.message)
676
524
  } catch (error) {
677
- throw new Error(`Failed to get user by email: ${error.message}`)
525
+ throw new Error(`Failed to get user by email: ${error.message}`, { cause: error })
678
526
  }
679
527
  }
680
528
 
@@ -690,6 +538,11 @@ export class AuthService extends BaseService {
690
538
  throw new Error('Project ID is required')
691
539
  }
692
540
 
541
+ // If there are no valid tokens, treat user as guest for public access
542
+ if (!this.hasValidTokens()) {
543
+ return 'guest'
544
+ }
545
+
693
546
  // Check cache first
694
547
  const cacheKey = `role_${projectId}`
695
548
  const cached = this._projectRoleCache.get(cacheKey)
@@ -715,7 +568,12 @@ export class AuthService extends BaseService {
715
568
  }
716
569
  throw new Error(response.message)
717
570
  } catch (error) {
718
- throw new Error(`Failed to get project role: ${error.message}`)
571
+ const message = error?.message || ''
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 })
719
577
  }
720
578
  }
721
579
 
@@ -729,6 +587,11 @@ export class AuthService extends BaseService {
729
587
  throw new Error('Project key is required')
730
588
  }
731
589
 
590
+ // If there are no valid tokens, treat user as guest for public access
591
+ if (!this.hasValidTokens()) {
592
+ return 'guest'
593
+ }
594
+
732
595
  // Check cache first
733
596
  const cacheKey = `role_key_${projectKey}`
734
597
  const cached = this._projectRoleCache.get(cacheKey)
@@ -754,7 +617,12 @@ export class AuthService extends BaseService {
754
617
  }
755
618
  throw new Error(response.message)
756
619
  } catch (error) {
757
- throw new Error(`Failed to get project role by key: ${error.message}`)
620
+ const message = error?.message || ''
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 })
758
626
  }
759
627
  }
760
628
 
@@ -882,7 +750,7 @@ export class AuthService extends BaseService {
882
750
  try {
883
751
  return await this.getMe()
884
752
  } catch (error) {
885
- throw new Error(`Failed to get current user: ${error.message}`)
753
+ throw new Error(`Failed to get current user: ${error.message}`, { cause: error })
886
754
  }
887
755
  }
888
756
 
@@ -1082,7 +950,6 @@ export class AuthService extends BaseService {
1082
950
  }
1083
951
  // Clear project role cache
1084
952
  this._projectRoleCache.clear()
1085
- this._initialized = false
1086
953
  this._setReady(false)
1087
954
  }
1088
955
  }
@@ -23,28 +23,14 @@ 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 (singleton). TokenManager handles persistence
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
- },
37
29
  onTokenError: error => {
38
30
  console.error('Token management error:', error)
39
31
  }
40
32
  })
41
33
 
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
-
48
34
  this._setReady()
49
35
  } catch (error) {
50
36
  this._setError(error)
@@ -54,7 +40,10 @@ export class BaseService {
54
40
 
55
41
  // Update context
56
42
  updateContext (context) {
57
- this._context = { ...this._context, ...context }
43
+ // Mutate in place to preserve the shared reference with the SDK context
44
+ if (context && typeof context === 'object') {
45
+ Object.assign(this._context, context)
46
+ }
58
47
  }
59
48
 
60
49
  // Get service status
@@ -123,12 +112,6 @@ export class BaseService {
123
112
  error
124
113
  )
125
114
  }
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
- }
132
115
  }
133
116
 
134
117
  try {
@@ -149,12 +132,12 @@ export class BaseService {
149
132
  } catch {
150
133
  // Use default error message
151
134
  }
152
- throw new Error(error.message || error.error || 'Request failed')
135
+ throw new Error(error.message || error.error || 'Request failed', { cause: error })
153
136
  }
154
137
 
155
138
  return response.status === 204 ? null : response.json()
156
139
  } catch (error) {
157
- throw new Error(`Request failed: ${error.message}`)
140
+ throw new Error(`Request failed: ${error.message}`, { cause: error })
158
141
  }
159
142
  }
160
143
 
@@ -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}`, { cause: error })
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}`, { cause: error })
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}`, { cause: error })
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}`, { cause: error })
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}`, { cause: error })
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}`, { cause: error })
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}`, { cause: error })
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}`, { cause: error })
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}`, { cause: error })
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}`, { cause: error })
409
409
  }
410
410
  }
411
411