@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
@@ -46,18 +46,28 @@ const CONFIG = {
46
46
  // For based api
47
47
  basedOrg: "symbols",
48
48
  // For based api
49
- githubClientId: "Ov23liHxyWFBxS8f1gnF",
49
+ githubClientId: "Ov23liAFrsR0StbAO6PO",
50
50
  // For github api
51
51
  // Environment-specific feature toggles (override common)
52
52
  features: {
53
53
  betaFeatures: true
54
54
  // Enable beta features in local dev
55
- }
55
+ },
56
+ typesenseCollectionName: "docs",
57
+ typesenseApiKey: "vZya3L2zpq8L6iI5WWMUZJZABvT63VDb",
58
+ typesenseHost: "localhost",
59
+ typesensePort: "8108",
60
+ typesenseProtocol: "http"
56
61
  },
57
62
  development: {
58
63
  socketUrl: "https://dev.api.symbols.app",
59
64
  apiUrl: "https://dev.api.symbols.app",
60
- githubClientId: "Ov23liHxyWFBxS8f1gnF"
65
+ githubClientId: "Ov23liHxyWFBxS8f1gnF",
66
+ typesenseCollectionName: "docs",
67
+ typesenseApiKey: "awmcVpbWqZi9IUgmvslp1C5LKDU8tMjA",
68
+ typesenseHost: "tl2qpnwxev4cjm36p-1.a1.typesense.net",
69
+ typesensePort: "443",
70
+ typesenseProtocol: "https"
61
71
  },
62
72
  testing: {
63
73
  socketUrl: "https://test.api.symbols.app",
@@ -65,12 +75,22 @@ const CONFIG = {
65
75
  basedEnv: "testing",
66
76
  basedProject: "platform-v2-sm",
67
77
  basedOrg: "symbols",
68
- githubClientId: "Ov23liHxyWFBxS8f1gnF"
78
+ githubClientId: "Ov23liHxyWFBxS8f1gnF",
79
+ typesenseCollectionName: "docs",
80
+ typesenseApiKey: "awmcVpbWqZi9IUgmvslp1C5LKDU8tMjA",
81
+ typesenseHost: "tl2qpnwxev4cjm36p-1.a1.typesense.net",
82
+ typesensePort: "443",
83
+ typesenseProtocol: "https"
69
84
  },
70
85
  upcoming: {
71
86
  socketUrl: "https://upcoming.api.symbols.app",
72
87
  apiUrl: "https://upcoming.api.symbols.app",
73
- githubClientId: "Ov23liWF7NvdZ056RV5J"
88
+ githubClientId: "Ov23liWF7NvdZ056RV5J",
89
+ typesenseCollectionName: "docs",
90
+ typesenseApiKey: "awmcVpbWqZi9IUgmvslp1C5LKDU8tMjA",
91
+ typesenseHost: "tl2qpnwxev4cjm36p-1.a1.typesense.net",
92
+ typesensePort: "443",
93
+ typesenseProtocol: "https"
74
94
  },
75
95
  staging: {
76
96
  socketUrl: "https://staging.api.symbols.app",
@@ -78,7 +98,12 @@ const CONFIG = {
78
98
  basedEnv: "staging",
79
99
  basedProject: "platform-v2-sm",
80
100
  basedOrg: "symbols",
81
- githubClientId: "Ov23ligwZDQVD0VfuWNa"
101
+ githubClientId: "Ov23ligwZDQVD0VfuWNa",
102
+ typesenseCollectionName: "docs",
103
+ typesenseApiKey: "awmcVpbWqZi9IUgmvslp1C5LKDU8tMjA",
104
+ typesenseHost: "tl2qpnwxev4cjm36p-1.a1.typesense.net",
105
+ typesensePort: "443",
106
+ typesenseProtocol: "https"
82
107
  },
83
108
  production: {
84
109
  socketUrl: "https://api.symbols.app",
@@ -86,7 +111,12 @@ const CONFIG = {
86
111
  basedEnv: "production",
87
112
  basedProject: "platform-v2-sm",
88
113
  basedOrg: "symbols",
89
- githubClientId: "Ov23liFAlOEIXtX3dBtR"
114
+ githubClientId: "Ov23liFAlOEIXtX3dBtR",
115
+ typesenseCollectionName: "docs",
116
+ typesenseApiKey: "awmcVpbWqZi9IUgmvslp1C5LKDU8tMjA",
117
+ typesenseHost: "tl2qpnwxev4cjm36p-1.a1.typesense.net",
118
+ typesensePort: "443",
119
+ typesenseProtocol: "https"
90
120
  }
91
121
  };
92
122
  const getEnvironment = () => {
@@ -109,6 +139,11 @@ const getConfig = () => {
109
139
  basedProject: process.env.SYMBOLS_APP_BASED_PROJECT || envConfig.basedProject,
110
140
  basedOrg: process.env.SYMBOLS_APP_BASED_ORG || envConfig.basedOrg,
111
141
  githubClientId: process.env.SYMBOLS_APP_GITHUB_CLIENT_ID || envConfig.githubClientId,
142
+ typesenseCollectionName: process.env.TYPESENSE_COLLECTION_NAME || envConfig.typesenseCollectionName,
143
+ typesenseApiKey: process.env.TYPESENSE_API_KEY || envConfig.typesenseApiKey,
144
+ typesenseHost: process.env.TYPESENSE_HOST || envConfig.typesenseHost,
145
+ typesensePort: process.env.TYPESENSE_PORT || envConfig.typesensePort,
146
+ typesenseProtocol: process.env.TYPESENSE_PROTOCOL || envConfig.typesenseProtocol,
112
147
  isDevelopment: (0, import_utils.isDevelopment)(env),
113
148
  isTesting: env === "testing",
114
149
  isStaging: env === "staging",
@@ -128,7 +163,7 @@ const getConfig = () => {
128
163
  );
129
164
  }
130
165
  if (finalConfig.isDevelopment) {
131
- console.log(
166
+ console.warn(
132
167
  "environment in SDK:",
133
168
  env || process.env.NODE_ENV || process.env.NODE_ENV
134
169
  );
package/dist/cjs/index.js CHANGED
@@ -47,6 +47,7 @@ module.exports = __toCommonJS(index_exports);
47
47
  var import_services = require("./services/index.js");
48
48
  var import_services2 = require("./utils/services.js");
49
49
  var import_environment = __toESM(require("./config/environment.js"), 1);
50
+ var import_rootEventBus = require("./state/rootEventBus.js");
50
51
  var import_services3 = require("./services/index.js");
51
52
  var import_environment2 = __toESM(require("./config/environment.js"), 1);
52
53
  class SDK {
@@ -54,6 +55,7 @@ class SDK {
54
55
  this._services = /* @__PURE__ */ new Map();
55
56
  this._context = {};
56
57
  this._options = this._validateOptions(options);
58
+ this.rootBus = import_rootEventBus.rootBus;
57
59
  this._createServiceProxies();
58
60
  }
59
61
  // Initialize SDK with context
@@ -147,6 +149,13 @@ class SDK {
147
149
  context: this._context,
148
150
  options: this._options
149
151
  })
152
+ ),
153
+ this._initService(
154
+ "screenshot",
155
+ (0, import_services.createScreenshotService)({
156
+ context: this._context,
157
+ options: this._options
158
+ })
150
159
  )
151
160
  ]);
152
161
  return this;
@@ -184,9 +193,10 @@ class SDK {
184
193
  }
185
194
  // Update context
186
195
  updateContext(newContext) {
196
+ const { authToken, ...sanitized } = newContext || {};
187
197
  this._context = {
188
198
  ...this._context,
189
- ...newContext
199
+ ...sanitized
190
200
  };
191
201
  for (const service of this._services.values()) {
192
202
  service.updateContext(this._context);
@@ -195,9 +205,7 @@ class SDK {
195
205
  // Check if SDK is ready
196
206
  isReady() {
197
207
  const sdkServices = Array.from(this._services.values());
198
- return sdkServices.length > 0 && sdkServices.every(
199
- (service) => service.isReady()
200
- );
208
+ return sdkServices.length > 0 && sdkServices.every((service) => service.isReady());
201
209
  }
202
210
  // Get SDK status
203
211
  getStatus() {
@@ -73,7 +73,7 @@ class AdminService extends import_BaseService.BaseService {
73
73
  }
74
74
  throw new Error(response.message);
75
75
  } catch (error) {
76
- throw new Error(`Failed to get admin users: ${error.message}`);
76
+ throw new Error(`Failed to get admin users: ${error.message}`, { cause: error });
77
77
  }
78
78
  }
79
79
  /**
@@ -104,7 +104,7 @@ class AdminService extends import_BaseService.BaseService {
104
104
  }
105
105
  throw new Error(response.message);
106
106
  } catch (error) {
107
- throw new Error(`Failed to assign projects to user: ${error.message}`);
107
+ throw new Error(`Failed to assign projects to user: ${error.message}`, { cause: error });
108
108
  }
109
109
  }
110
110
  /**
@@ -133,7 +133,7 @@ class AdminService extends import_BaseService.BaseService {
133
133
  if ((_a = error.message) == null ? void 0 : _a.includes("Duplicate")) {
134
134
  throw new Error("Username already exists");
135
135
  }
136
- throw new Error(`Failed to update user: ${error.message}`);
136
+ throw new Error(`Failed to update user: ${error.message}`, { cause: error });
137
137
  }
138
138
  }
139
139
  // ==================== ADMIN HELPER METHODS ====================
@@ -263,7 +263,7 @@ class AdminService extends import_BaseService.BaseService {
263
263
  });
264
264
  return stats;
265
265
  } catch (error) {
266
- throw new Error(`Failed to get user stats: ${error.message}`);
266
+ throw new Error(`Failed to get user stats: ${error.message}`, { cause: error });
267
267
  }
268
268
  }
269
269
  /**
@@ -1,8 +1,6 @@
1
- var __create = Object.create;
2
1
  var __defProp = Object.defineProperty;
3
2
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
3
  var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __getProtoOf = Object.getPrototypeOf;
6
4
  var __hasOwnProp = Object.prototype.hasOwnProperty;
7
5
  var __export = (target, all) => {
8
6
  for (var name in all)
@@ -16,14 +14,6 @@ var __copyProps = (to, from, except, desc) => {
16
14
  }
17
15
  return to;
18
16
  };
19
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
- // If the importer is in node compatibility mode or this is not an ESM
21
- // file that has been converted to a CommonJS file using a Babel-
22
- // compatible transform (i.e. "__esModule" has not been set), then set
23
- // "default" to the CommonJS "module.exports" for node compatibility.
24
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
- mod
26
- ));
27
17
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
18
  var AuthService_exports = {};
29
19
  __export(AuthService_exports, {
@@ -31,8 +21,6 @@ __export(AuthService_exports, {
31
21
  });
32
22
  module.exports = __toCommonJS(AuthService_exports);
33
23
  var import_BaseService = require("./BaseService.js");
34
- var import_environment = __toESM(require("../config/environment.js"), 1);
35
- var import_TokenManager = require("../utils/TokenManager.js");
36
24
  var import_permission = require("../utils/permission.js");
37
25
  class AuthService extends import_BaseService.BaseService {
38
26
  constructor(config) {
@@ -45,118 +33,10 @@ class AuthService extends import_BaseService.BaseService {
45
33
  "pro2",
46
34
  "enterprise"
47
35
  ]);
48
- this._initialized = false;
49
- this._apiUrl = null;
50
- this._tokenManager = null;
51
36
  this._projectRoleCache = /* @__PURE__ */ new Map();
52
37
  this._roleCacheExpiry = 5 * 60 * 1e3;
53
38
  }
54
- init({ context }) {
55
- try {
56
- const { appKey, authToken } = context || this._context;
57
- this._apiUrl = import_environment.default.apiUrl;
58
- if (!this._apiUrl) {
59
- throw new Error("Auth service base URL not configured");
60
- }
61
- this._tokenManager = (0, import_TokenManager.getTokenManager)({
62
- apiUrl: this._apiUrl,
63
- onTokenRefresh: (tokens) => {
64
- this.updateContext({ authToken: tokens.accessToken });
65
- },
66
- onTokenExpired: () => {
67
- this.updateContext({ authToken: null });
68
- },
69
- onTokenError: (error) => {
70
- console.error("Token management error:", error);
71
- }
72
- });
73
- if (authToken && !this._tokenManager.hasTokens()) {
74
- this._tokenManager.setTokens({ access_token: authToken });
75
- }
76
- this._info = {
77
- config: {
78
- apiUrl: this._apiUrl,
79
- appKey: appKey ? `${appKey.substr(0, 4)}...${appKey.substr(-4)}` : null,
80
- hasToken: Boolean(authToken)
81
- }
82
- };
83
- this._initialized = true;
84
- this._setReady();
85
- } catch (error) {
86
- this._setError(error);
87
- throw error;
88
- }
89
- }
90
- // Helper method to make HTTP requests
91
- async _request(endpoint, options = {}) {
92
- const url = `${this._apiUrl}/core${endpoint}`;
93
- const defaultHeaders = {};
94
- if (!(options.body instanceof FormData)) {
95
- defaultHeaders["Content-Type"] = "application/json";
96
- }
97
- if (this._requiresInit(options.methodName) && this._tokenManager) {
98
- try {
99
- const validToken = await this._tokenManager.ensureValidToken();
100
- if (validToken) {
101
- const authHeader = this._tokenManager.getAuthHeader();
102
- if (authHeader) {
103
- defaultHeaders.Authorization = authHeader;
104
- }
105
- }
106
- } catch (error) {
107
- console.warn(
108
- "Token management failed, proceeding without authentication:",
109
- error
110
- );
111
- }
112
- } else if (this._requiresInit(options.methodName)) {
113
- const { authToken } = this._context;
114
- if (authToken) {
115
- defaultHeaders.Authorization = `Bearer ${authToken}`;
116
- }
117
- }
118
- try {
119
- const response = await fetch(url, {
120
- ...options,
121
- headers: {
122
- ...defaultHeaders,
123
- ...options.headers
124
- }
125
- });
126
- if (!response.ok) {
127
- let error = {
128
- message: `HTTP ${response.status}: ${response.statusText}`
129
- };
130
- try {
131
- error = await response.json();
132
- } catch {
133
- }
134
- throw new Error(error.message || error.error || "Request failed");
135
- }
136
- return response.status === 204 ? null : response.json();
137
- } catch (error) {
138
- throw new Error(`Request failed: ${error.message}`);
139
- }
140
- }
141
- _requiresInit(methodName) {
142
- const noInitMethods = /* @__PURE__ */ new Set([
143
- "register",
144
- "login",
145
- "googleAuth",
146
- "googleAuthCallback",
147
- "githubAuth",
148
- "requestPasswordReset",
149
- "confirmPasswordReset",
150
- "confirmRegistration",
151
- "verifyEmail"
152
- ]);
153
- return !noInitMethods.has(methodName);
154
- }
155
- _requireReady(methodName) {
156
- if (this._requiresInit(methodName) && !this._initialized) {
157
- throw new Error("Auth service not initialized");
158
- }
159
- }
39
+ // Use BaseService.init/_request/_requireReady implementations
160
40
  // ==================== AUTH METHODS ====================
161
41
  async register(userData) {
162
42
  try {
@@ -170,7 +50,7 @@ class AuthService extends import_BaseService.BaseService {
170
50
  }
171
51
  throw new Error(response.message);
172
52
  } catch (error) {
173
- throw new Error(`Registration failed: ${error.message}`);
53
+ throw new Error(`Registration failed: ${error.message}`, { cause: error });
174
54
  }
175
55
  }
176
56
  async login(email, password) {
@@ -192,14 +72,13 @@ class AuthService extends import_BaseService.BaseService {
192
72
  if (this._tokenManager) {
193
73
  this._tokenManager.setTokens(tokenData);
194
74
  }
195
- this.updateContext({ authToken: tokens.accessToken });
196
75
  }
197
76
  if (response.success) {
198
77
  return response.data;
199
78
  }
200
79
  throw new Error(response.message);
201
80
  } catch (error) {
202
- throw new Error(`Login failed: ${error.message}`);
81
+ throw new Error(`Login failed: ${error.message}`, { cause: error });
203
82
  }
204
83
  }
205
84
  async logout() {
@@ -212,13 +91,11 @@ class AuthService extends import_BaseService.BaseService {
212
91
  if (this._tokenManager) {
213
92
  this._tokenManager.clearTokens();
214
93
  }
215
- this.updateContext({ authToken: null });
216
94
  } catch (error) {
217
95
  if (this._tokenManager) {
218
96
  this._tokenManager.clearTokens();
219
97
  }
220
- this.updateContext({ authToken: null });
221
- throw new Error(`Logout failed: ${error.message}`);
98
+ throw new Error(`Logout failed: ${error.message}`, { cause: error });
222
99
  }
223
100
  }
224
101
  async refreshToken(refreshToken) {
@@ -233,7 +110,7 @@ class AuthService extends import_BaseService.BaseService {
233
110
  }
234
111
  throw new Error(response.message);
235
112
  } catch (error) {
236
- throw new Error(`Token refresh failed: ${error.message}`);
113
+ throw new Error(`Token refresh failed: ${error.message}`, { cause: error });
237
114
  }
238
115
  }
239
116
  async googleAuth(idToken, inviteToken = null) {
@@ -259,14 +136,13 @@ class AuthService extends import_BaseService.BaseService {
259
136
  if (this._tokenManager) {
260
137
  this._tokenManager.setTokens(tokenData);
261
138
  }
262
- this.updateContext({ authToken: tokens.accessToken });
263
139
  }
264
140
  if (response.success) {
265
141
  return response.data;
266
142
  }
267
143
  throw new Error(response.message);
268
144
  } catch (error) {
269
- throw new Error(`Google auth failed: ${error.message}`);
145
+ throw new Error(`Google auth failed: ${error.message}`, { cause: error });
270
146
  }
271
147
  }
272
148
  async githubAuth(code, inviteToken = null) {
@@ -292,14 +168,13 @@ class AuthService extends import_BaseService.BaseService {
292
168
  if (this._tokenManager) {
293
169
  this._tokenManager.setTokens(tokenData);
294
170
  }
295
- this.updateContext({ authToken: tokens.accessToken });
296
171
  }
297
172
  if (response.success) {
298
173
  return response.data;
299
174
  }
300
175
  throw new Error(response.message);
301
176
  } catch (error) {
302
- throw new Error(`GitHub auth failed: ${error.message}`);
177
+ throw new Error(`GitHub auth failed: ${error.message}`, { cause: error });
303
178
  }
304
179
  }
305
180
  async googleAuthCallback(code, redirectUri, inviteToken = null) {
@@ -325,14 +200,13 @@ class AuthService extends import_BaseService.BaseService {
325
200
  if (this._tokenManager) {
326
201
  this._tokenManager.setTokens(tokenData);
327
202
  }
328
- this.updateContext({ authToken: tokens.accessToken });
329
203
  }
330
204
  if (response.success) {
331
205
  return response.data;
332
206
  }
333
207
  throw new Error(response.message);
334
208
  } catch (error) {
335
- throw new Error(`Google auth callback failed: ${error.message}`);
209
+ throw new Error(`Google auth callback failed: ${error.message}`, { cause: error });
336
210
  }
337
211
  }
338
212
  async requestPasswordReset(email) {
@@ -347,7 +221,7 @@ class AuthService extends import_BaseService.BaseService {
347
221
  }
348
222
  throw new Error(response.message);
349
223
  } catch (error) {
350
- throw new Error(`Password reset request failed: ${error.message}`);
224
+ throw new Error(`Password reset request failed: ${error.message}`, { cause: error });
351
225
  }
352
226
  }
353
227
  async confirmPasswordReset(token, password) {
@@ -362,7 +236,7 @@ class AuthService extends import_BaseService.BaseService {
362
236
  }
363
237
  throw new Error(response.message);
364
238
  } catch (error) {
365
- throw new Error(`Password reset confirmation failed: ${error.message}`);
239
+ throw new Error(`Password reset confirmation failed: ${error.message}`, { cause: error });
366
240
  }
367
241
  }
368
242
  async confirmRegistration(token) {
@@ -377,7 +251,7 @@ class AuthService extends import_BaseService.BaseService {
377
251
  }
378
252
  throw new Error(response.message);
379
253
  } catch (error) {
380
- throw new Error(`Registration confirmation failed: ${error.message}`);
254
+ throw new Error(`Registration confirmation failed: ${error.message}`, { cause: error });
381
255
  }
382
256
  }
383
257
  async requestPasswordChange() {
@@ -392,7 +266,7 @@ class AuthService extends import_BaseService.BaseService {
392
266
  }
393
267
  throw new Error(response.message);
394
268
  } catch (error) {
395
- throw new Error(`Password change request failed: ${error.message}`);
269
+ throw new Error(`Password change request failed: ${error.message}`, { cause: error });
396
270
  }
397
271
  }
398
272
  async confirmPasswordChange(currentPassword, newPassword, code) {
@@ -408,7 +282,7 @@ class AuthService extends import_BaseService.BaseService {
408
282
  }
409
283
  throw new Error(response.message);
410
284
  } catch (error) {
411
- throw new Error(`Password change confirmation failed: ${error.message}`);
285
+ throw new Error(`Password change confirmation failed: ${error.message}`, { cause: error });
412
286
  }
413
287
  }
414
288
  async getMe() {
@@ -423,7 +297,7 @@ class AuthService extends import_BaseService.BaseService {
423
297
  }
424
298
  throw new Error(response.message);
425
299
  } catch (error) {
426
- throw new Error(`Failed to get user profile: ${error.message}`);
300
+ throw new Error(`Failed to get user profile: ${error.message}`, { cause: error });
427
301
  }
428
302
  }
429
303
  /**
@@ -523,7 +397,7 @@ class AuthService extends import_BaseService.BaseService {
523
397
  }
524
398
  throw new Error(response.message);
525
399
  } catch (error) {
526
- throw new Error(`Failed to get user profile: ${error.message}`);
400
+ throw new Error(`Failed to get user profile: ${error.message}`, { cause: error });
527
401
  }
528
402
  }
529
403
  async updateUserProfile(profileData) {
@@ -539,7 +413,7 @@ class AuthService extends import_BaseService.BaseService {
539
413
  }
540
414
  throw new Error(response.message);
541
415
  } catch (error) {
542
- throw new Error(`Failed to update user profile: ${error.message}`);
416
+ throw new Error(`Failed to update user profile: ${error.message}`, { cause: error });
543
417
  }
544
418
  }
545
419
  async getUserProjects() {
@@ -562,7 +436,7 @@ class AuthService extends import_BaseService.BaseService {
562
436
  }
563
437
  throw new Error(response.message);
564
438
  } catch (error) {
565
- throw new Error(`Failed to get user projects: ${error.message}`);
439
+ throw new Error(`Failed to get user projects: ${error.message}`, { cause: error });
566
440
  }
567
441
  }
568
442
  async getUser(userId) {
@@ -580,7 +454,7 @@ class AuthService extends import_BaseService.BaseService {
580
454
  }
581
455
  throw new Error(response.message);
582
456
  } catch (error) {
583
- throw new Error(`Failed to get user: ${error.message}`);
457
+ throw new Error(`Failed to get user: ${error.message}`, { cause: error });
584
458
  }
585
459
  }
586
460
  async getUserByEmail(email) {
@@ -598,7 +472,7 @@ class AuthService extends import_BaseService.BaseService {
598
472
  }
599
473
  throw new Error(response.message);
600
474
  } catch (error) {
601
- throw new Error(`Failed to get user by email: ${error.message}`);
475
+ throw new Error(`Failed to get user by email: ${error.message}`, { cause: error });
602
476
  }
603
477
  }
604
478
  // ==================== PROJECT ROLE METHODS ====================
@@ -611,6 +485,9 @@ class AuthService extends import_BaseService.BaseService {
611
485
  if (!projectId) {
612
486
  throw new Error("Project ID is required");
613
487
  }
488
+ if (!this.hasValidTokens()) {
489
+ return "guest";
490
+ }
614
491
  const cacheKey = `role_${projectId}`;
615
492
  const cached = this._projectRoleCache.get(cacheKey);
616
493
  if (cached && Date.now() - cached.timestamp < this._roleCacheExpiry) {
@@ -631,7 +508,11 @@ class AuthService extends import_BaseService.BaseService {
631
508
  }
632
509
  throw new Error(response.message);
633
510
  } catch (error) {
634
- throw new Error(`Failed to get project role: ${error.message}`);
511
+ const message = (error == null ? void 0 : error.message) || "";
512
+ if (/401|403|unauthorized|no token|invalid token/iu.test(message)) {
513
+ return "guest";
514
+ }
515
+ throw new Error(`Failed to get project role: ${message}`, { cause: error });
635
516
  }
636
517
  }
637
518
  /**
@@ -643,6 +524,9 @@ class AuthService extends import_BaseService.BaseService {
643
524
  if (!projectKey) {
644
525
  throw new Error("Project key is required");
645
526
  }
527
+ if (!this.hasValidTokens()) {
528
+ return "guest";
529
+ }
646
530
  const cacheKey = `role_key_${projectKey}`;
647
531
  const cached = this._projectRoleCache.get(cacheKey);
648
532
  if (cached && Date.now() - cached.timestamp < this._roleCacheExpiry) {
@@ -663,7 +547,11 @@ class AuthService extends import_BaseService.BaseService {
663
547
  }
664
548
  throw new Error(response.message);
665
549
  } catch (error) {
666
- throw new Error(`Failed to get project role by key: ${error.message}`);
550
+ const message = (error == null ? void 0 : error.message) || "";
551
+ if (/401|403|unauthorized|no token|invalid token/iu.test(message)) {
552
+ return "guest";
553
+ }
554
+ throw new Error(`Failed to get project role by key: ${message}`, { cause: error });
667
555
  }
668
556
  }
669
557
  /**
@@ -766,7 +654,7 @@ class AuthService extends import_BaseService.BaseService {
766
654
  try {
767
655
  return await this.getMe();
768
656
  } catch (error) {
769
- throw new Error(`Failed to get current user: ${error.message}`);
657
+ throw new Error(`Failed to get current user: ${error.message}`, { cause: error });
770
658
  }
771
659
  }
772
660
  /**
@@ -923,7 +811,6 @@ class AuthService extends import_BaseService.BaseService {
923
811
  this._tokenManager = null;
924
812
  }
925
813
  this._projectRoleCache.clear();
926
- this._initialized = false;
927
814
  this._setReady(false);
928
815
  }
929
816
  }
@@ -51,20 +51,10 @@ class BaseService {
51
51
  }
52
52
  this._tokenManager = (0, import_TokenManager.getTokenManager)({
53
53
  apiUrl: this._apiUrl,
54
- onTokenRefresh: (tokens) => {
55
- this.updateContext({ authToken: tokens.accessToken });
56
- },
57
- onTokenExpired: () => {
58
- this.updateContext({ authToken: null });
59
- },
60
54
  onTokenError: (error) => {
61
55
  console.error("Token management error:", error);
62
56
  }
63
57
  });
64
- const { authToken } = this._context;
65
- if (authToken && !this._tokenManager.hasTokens()) {
66
- this._tokenManager.setTokens({ access_token: authToken });
67
- }
68
58
  this._setReady();
69
59
  } catch (error) {
70
60
  this._setError(error);
@@ -73,7 +63,9 @@ class BaseService {
73
63
  }
74
64
  // Update context
75
65
  updateContext(context) {
76
- this._context = { ...this._context, ...context };
66
+ if (context && typeof context === "object") {
67
+ Object.assign(this._context, context);
68
+ }
77
69
  }
78
70
  // Get service status
79
71
  getStatus() {
@@ -128,11 +120,6 @@ class BaseService {
128
120
  error
129
121
  );
130
122
  }
131
- } else if (this._requiresInit(options.methodName)) {
132
- const { authToken } = this._context;
133
- if (authToken) {
134
- defaultHeaders.Authorization = `Bearer ${authToken}`;
135
- }
136
123
  }
137
124
  try {
138
125
  const response = await fetch(url, {
@@ -150,11 +137,11 @@ class BaseService {
150
137
  error = await response.json();
151
138
  } catch {
152
139
  }
153
- throw new Error(error.message || error.error || "Request failed");
140
+ throw new Error(error.message || error.error || "Request failed", { cause: error });
154
141
  }
155
142
  return response.status === 204 ? null : response.json();
156
143
  } catch (error) {
157
- throw new Error(`Request failed: ${error.message}`);
144
+ throw new Error(`Request failed: ${error.message}`, { cause: error });
158
145
  }
159
146
  }
160
147
  // Helper method to determine if a method requires initialization