@symbo.ls/sdk 2.32.2 → 2.32.4

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
@@ -28,18 +28,28 @@ var CONFIG = {
28
28
  // For based api
29
29
  basedOrg: "symbols",
30
30
  // For based api
31
- githubClientId: "Ov23liHxyWFBxS8f1gnF",
31
+ githubClientId: "Ov23liAFrsR0StbAO6PO",
32
32
  // For github api
33
33
  // Environment-specific feature toggles (override common)
34
34
  features: {
35
35
  betaFeatures: true
36
36
  // Enable beta features in local dev
37
- }
37
+ },
38
+ typesenseCollectionName: "docs",
39
+ typesenseApiKey: "vZya3L2zpq8L6iI5WWMUZJZABvT63VDb",
40
+ typesenseHost: "localhost",
41
+ typesensePort: "8108",
42
+ typesenseProtocol: "http"
38
43
  },
39
44
  development: {
40
45
  socketUrl: "https://dev.api.symbols.app",
41
46
  apiUrl: "https://dev.api.symbols.app",
42
- githubClientId: "Ov23liHxyWFBxS8f1gnF"
47
+ githubClientId: "Ov23liHxyWFBxS8f1gnF",
48
+ typesenseCollectionName: "docs",
49
+ typesenseApiKey: "awmcVpbWqZi9IUgmvslp1C5LKDU8tMjA",
50
+ typesenseHost: "tl2qpnwxev4cjm36p-1.a1.typesense.net",
51
+ typesensePort: "443",
52
+ typesenseProtocol: "https"
43
53
  },
44
54
  testing: {
45
55
  socketUrl: "https://test.api.symbols.app",
@@ -47,12 +57,22 @@ var CONFIG = {
47
57
  basedEnv: "testing",
48
58
  basedProject: "platform-v2-sm",
49
59
  basedOrg: "symbols",
50
- githubClientId: "Ov23liHxyWFBxS8f1gnF"
60
+ githubClientId: "Ov23liHxyWFBxS8f1gnF",
61
+ typesenseCollectionName: "docs",
62
+ typesenseApiKey: "awmcVpbWqZi9IUgmvslp1C5LKDU8tMjA",
63
+ typesenseHost: "tl2qpnwxev4cjm36p-1.a1.typesense.net",
64
+ typesensePort: "443",
65
+ typesenseProtocol: "https"
51
66
  },
52
67
  upcoming: {
53
68
  socketUrl: "https://upcoming.api.symbols.app",
54
69
  apiUrl: "https://upcoming.api.symbols.app",
55
- githubClientId: "Ov23liWF7NvdZ056RV5J"
70
+ githubClientId: "Ov23liWF7NvdZ056RV5J",
71
+ typesenseCollectionName: "docs",
72
+ typesenseApiKey: "awmcVpbWqZi9IUgmvslp1C5LKDU8tMjA",
73
+ typesenseHost: "tl2qpnwxev4cjm36p-1.a1.typesense.net",
74
+ typesensePort: "443",
75
+ typesenseProtocol: "https"
56
76
  },
57
77
  staging: {
58
78
  socketUrl: "https://staging.api.symbols.app",
@@ -60,7 +80,12 @@ var CONFIG = {
60
80
  basedEnv: "staging",
61
81
  basedProject: "platform-v2-sm",
62
82
  basedOrg: "symbols",
63
- githubClientId: "Ov23ligwZDQVD0VfuWNa"
83
+ githubClientId: "Ov23ligwZDQVD0VfuWNa",
84
+ typesenseCollectionName: "docs",
85
+ typesenseApiKey: "awmcVpbWqZi9IUgmvslp1C5LKDU8tMjA",
86
+ typesenseHost: "tl2qpnwxev4cjm36p-1.a1.typesense.net",
87
+ typesensePort: "443",
88
+ typesenseProtocol: "https"
64
89
  },
65
90
  production: {
66
91
  socketUrl: "https://api.symbols.app",
@@ -68,7 +93,12 @@ var CONFIG = {
68
93
  basedEnv: "production",
69
94
  basedProject: "platform-v2-sm",
70
95
  basedOrg: "symbols",
71
- githubClientId: "Ov23liFAlOEIXtX3dBtR"
96
+ githubClientId: "Ov23liFAlOEIXtX3dBtR",
97
+ typesenseCollectionName: "docs",
98
+ typesenseApiKey: "awmcVpbWqZi9IUgmvslp1C5LKDU8tMjA",
99
+ typesenseHost: "tl2qpnwxev4cjm36p-1.a1.typesense.net",
100
+ typesensePort: "443",
101
+ typesenseProtocol: "https"
72
102
  }
73
103
  };
74
104
  var getEnvironment = () => {
@@ -90,6 +120,11 @@ var getConfig = () => {
90
120
  basedProject: process.env.SYMBOLS_APP_BASED_PROJECT || envConfig.basedProject,
91
121
  basedOrg: process.env.SYMBOLS_APP_BASED_ORG || envConfig.basedOrg,
92
122
  githubClientId: process.env.SYMBOLS_APP_GITHUB_CLIENT_ID || envConfig.githubClientId,
123
+ typesenseCollectionName: process.env.TYPESENSE_COLLECTION_NAME || envConfig.typesenseCollectionName,
124
+ typesenseApiKey: process.env.TYPESENSE_API_KEY || envConfig.typesenseApiKey,
125
+ typesenseHost: process.env.TYPESENSE_HOST || envConfig.typesenseHost,
126
+ typesensePort: process.env.TYPESENSE_PORT || envConfig.typesensePort,
127
+ typesenseProtocol: process.env.TYPESENSE_PROTOCOL || envConfig.typesenseProtocol,
93
128
  isDevelopment: isDevelopment(env),
94
129
  isTesting: env === "testing",
95
130
  isStaging: env === "staging",
@@ -109,7 +144,7 @@ var getConfig = () => {
109
144
  );
110
145
  }
111
146
  if (finalConfig.isDevelopment) {
112
- console.log(
147
+ console.warn(
113
148
  "environment in SDK:",
114
149
  env || process.env.NODE_ENV || process.env.NODE_ENV
115
150
  );
@@ -148,7 +183,7 @@ var TokenManager = class {
148
183
  });
149
184
  this.config = {
150
185
  storagePrefix: "symbols_",
151
- storageType: typeof window === "undefined" || process.env.NODE_ENV === "test" ? "memory" : "localStorage",
186
+ storageType: typeof window === "undefined" || process.env.NODE_ENV === "test" || process.env.NODE_ENV === "testing" ? "memory" : "localStorage",
152
187
  // 'localStorage' | 'sessionStorage' | 'memory'
153
188
  refreshBuffer: 60 * 1e3,
154
189
  // Refresh 1 minute before expiry
@@ -188,15 +223,26 @@ var TokenManager = class {
188
223
  if (typeof window === "undefined") {
189
224
  return this._memoryStorage;
190
225
  }
191
- const hasLocalStorage = typeof window.localStorage !== "undefined";
192
- const hasSessionStorage = typeof window.sessionStorage !== "undefined";
226
+ const safeGetStorage = (provider) => {
227
+ try {
228
+ const storage = provider();
229
+ const testKey = `${this.config.storagePrefix}__tm_test__`;
230
+ storage.setItem(testKey, "1");
231
+ storage.removeItem(testKey);
232
+ return storage;
233
+ } catch {
234
+ return null;
235
+ }
236
+ };
237
+ const localStorageInstance = safeGetStorage(() => window.localStorage);
238
+ const sessionStorageInstance = safeGetStorage(() => window.sessionStorage);
193
239
  switch (this.config.storageType) {
194
240
  case "sessionStorage":
195
- return hasSessionStorage ? window.sessionStorage : this._memoryStorage;
241
+ return sessionStorageInstance || this._memoryStorage;
196
242
  case "memory":
197
243
  return this._memoryStorage;
198
244
  default:
199
- return hasLocalStorage ? window.localStorage : this._memoryStorage;
245
+ return localStorageInstance || this._memoryStorage;
200
246
  }
201
247
  }
202
248
  /**
@@ -535,20 +581,10 @@ var BaseService = class {
535
581
  }
536
582
  this._tokenManager = getTokenManager({
537
583
  apiUrl: this._apiUrl,
538
- onTokenRefresh: (tokens) => {
539
- this.updateContext({ authToken: tokens.accessToken });
540
- },
541
- onTokenExpired: () => {
542
- this.updateContext({ authToken: null });
543
- },
544
584
  onTokenError: (error) => {
545
585
  console.error("Token management error:", error);
546
586
  }
547
587
  });
548
- const { authToken } = this._context;
549
- if (authToken && !this._tokenManager.hasTokens()) {
550
- this._tokenManager.setTokens({ access_token: authToken });
551
- }
552
588
  this._setReady();
553
589
  } catch (error) {
554
590
  this._setError(error);
@@ -557,7 +593,9 @@ var BaseService = class {
557
593
  }
558
594
  // Update context
559
595
  updateContext(context) {
560
- this._context = { ...this._context, ...context };
596
+ if (context && typeof context === "object") {
597
+ Object.assign(this._context, context);
598
+ }
561
599
  }
562
600
  // Get service status
563
601
  getStatus() {
@@ -612,11 +650,6 @@ var BaseService = class {
612
650
  error
613
651
  );
614
652
  }
615
- } else if (this._requiresInit(options.methodName)) {
616
- const { authToken } = this._context;
617
- if (authToken) {
618
- defaultHeaders.Authorization = `Bearer ${authToken}`;
619
- }
620
653
  }
621
654
  try {
622
655
  const response = await fetch(url, {
@@ -634,11 +667,11 @@ var BaseService = class {
634
667
  error = await response.json();
635
668
  } catch {
636
669
  }
637
- throw new Error(error.message || error.error || "Request failed");
670
+ throw new Error(error.message || error.error || "Request failed", { cause: error });
638
671
  }
639
672
  return response.status === 204 ? null : response.json();
640
673
  } catch (error) {
641
- throw new Error(`Request failed: ${error.message}`);
674
+ throw new Error(`Request failed: ${error.message}`, { cause: error });
642
675
  }
643
676
  }
644
677
  // Helper method to determine if a method requires initialization
@@ -819,118 +852,10 @@ var AuthService = class extends BaseService {
819
852
  "pro2",
820
853
  "enterprise"
821
854
  ]);
822
- this._initialized = false;
823
- this._apiUrl = null;
824
- this._tokenManager = null;
825
855
  this._projectRoleCache = /* @__PURE__ */ new Map();
826
856
  this._roleCacheExpiry = 5 * 60 * 1e3;
827
857
  }
828
- init({ context }) {
829
- try {
830
- const { appKey, authToken } = context || this._context;
831
- this._apiUrl = environment_default.apiUrl;
832
- if (!this._apiUrl) {
833
- throw new Error("Auth service base URL not configured");
834
- }
835
- this._tokenManager = getTokenManager({
836
- apiUrl: this._apiUrl,
837
- onTokenRefresh: (tokens) => {
838
- this.updateContext({ authToken: tokens.accessToken });
839
- },
840
- onTokenExpired: () => {
841
- this.updateContext({ authToken: null });
842
- },
843
- onTokenError: (error) => {
844
- console.error("Token management error:", error);
845
- }
846
- });
847
- if (authToken && !this._tokenManager.hasTokens()) {
848
- this._tokenManager.setTokens({ access_token: authToken });
849
- }
850
- this._info = {
851
- config: {
852
- apiUrl: this._apiUrl,
853
- appKey: appKey ? `${appKey.substr(0, 4)}...${appKey.substr(-4)}` : null,
854
- hasToken: Boolean(authToken)
855
- }
856
- };
857
- this._initialized = true;
858
- this._setReady();
859
- } catch (error) {
860
- this._setError(error);
861
- throw error;
862
- }
863
- }
864
- // Helper method to make HTTP requests
865
- async _request(endpoint, options = {}) {
866
- const url = `${this._apiUrl}/core${endpoint}`;
867
- const defaultHeaders = {};
868
- if (!(options.body instanceof FormData)) {
869
- defaultHeaders["Content-Type"] = "application/json";
870
- }
871
- if (this._requiresInit(options.methodName) && this._tokenManager) {
872
- try {
873
- const validToken = await this._tokenManager.ensureValidToken();
874
- if (validToken) {
875
- const authHeader = this._tokenManager.getAuthHeader();
876
- if (authHeader) {
877
- defaultHeaders.Authorization = authHeader;
878
- }
879
- }
880
- } catch (error) {
881
- console.warn(
882
- "Token management failed, proceeding without authentication:",
883
- error
884
- );
885
- }
886
- } else if (this._requiresInit(options.methodName)) {
887
- const { authToken } = this._context;
888
- if (authToken) {
889
- defaultHeaders.Authorization = `Bearer ${authToken}`;
890
- }
891
- }
892
- try {
893
- const response = await fetch(url, {
894
- ...options,
895
- headers: {
896
- ...defaultHeaders,
897
- ...options.headers
898
- }
899
- });
900
- if (!response.ok) {
901
- let error = {
902
- message: `HTTP ${response.status}: ${response.statusText}`
903
- };
904
- try {
905
- error = await response.json();
906
- } catch {
907
- }
908
- throw new Error(error.message || error.error || "Request failed");
909
- }
910
- return response.status === 204 ? null : response.json();
911
- } catch (error) {
912
- throw new Error(`Request failed: ${error.message}`);
913
- }
914
- }
915
- _requiresInit(methodName) {
916
- const noInitMethods = /* @__PURE__ */ new Set([
917
- "register",
918
- "login",
919
- "googleAuth",
920
- "googleAuthCallback",
921
- "githubAuth",
922
- "requestPasswordReset",
923
- "confirmPasswordReset",
924
- "confirmRegistration",
925
- "verifyEmail"
926
- ]);
927
- return !noInitMethods.has(methodName);
928
- }
929
- _requireReady(methodName) {
930
- if (this._requiresInit(methodName) && !this._initialized) {
931
- throw new Error("Auth service not initialized");
932
- }
933
- }
858
+ // Use BaseService.init/_request/_requireReady implementations
934
859
  // ==================== AUTH METHODS ====================
935
860
  async register(userData) {
936
861
  try {
@@ -944,7 +869,7 @@ var AuthService = class extends BaseService {
944
869
  }
945
870
  throw new Error(response.message);
946
871
  } catch (error) {
947
- throw new Error(`Registration failed: ${error.message}`);
872
+ throw new Error(`Registration failed: ${error.message}`, { cause: error });
948
873
  }
949
874
  }
950
875
  async login(email, password) {
@@ -966,14 +891,13 @@ var AuthService = class extends BaseService {
966
891
  if (this._tokenManager) {
967
892
  this._tokenManager.setTokens(tokenData);
968
893
  }
969
- this.updateContext({ authToken: tokens.accessToken });
970
894
  }
971
895
  if (response.success) {
972
896
  return response.data;
973
897
  }
974
898
  throw new Error(response.message);
975
899
  } catch (error) {
976
- throw new Error(`Login failed: ${error.message}`);
900
+ throw new Error(`Login failed: ${error.message}`, { cause: error });
977
901
  }
978
902
  }
979
903
  async logout() {
@@ -986,13 +910,11 @@ var AuthService = class extends BaseService {
986
910
  if (this._tokenManager) {
987
911
  this._tokenManager.clearTokens();
988
912
  }
989
- this.updateContext({ authToken: null });
990
913
  } catch (error) {
991
914
  if (this._tokenManager) {
992
915
  this._tokenManager.clearTokens();
993
916
  }
994
- this.updateContext({ authToken: null });
995
- throw new Error(`Logout failed: ${error.message}`);
917
+ throw new Error(`Logout failed: ${error.message}`, { cause: error });
996
918
  }
997
919
  }
998
920
  async refreshToken(refreshToken) {
@@ -1007,7 +929,7 @@ var AuthService = class extends BaseService {
1007
929
  }
1008
930
  throw new Error(response.message);
1009
931
  } catch (error) {
1010
- throw new Error(`Token refresh failed: ${error.message}`);
932
+ throw new Error(`Token refresh failed: ${error.message}`, { cause: error });
1011
933
  }
1012
934
  }
1013
935
  async googleAuth(idToken, inviteToken = null) {
@@ -1033,14 +955,13 @@ var AuthService = class extends BaseService {
1033
955
  if (this._tokenManager) {
1034
956
  this._tokenManager.setTokens(tokenData);
1035
957
  }
1036
- this.updateContext({ authToken: tokens.accessToken });
1037
958
  }
1038
959
  if (response.success) {
1039
960
  return response.data;
1040
961
  }
1041
962
  throw new Error(response.message);
1042
963
  } catch (error) {
1043
- throw new Error(`Google auth failed: ${error.message}`);
964
+ throw new Error(`Google auth failed: ${error.message}`, { cause: error });
1044
965
  }
1045
966
  }
1046
967
  async githubAuth(code, inviteToken = null) {
@@ -1066,14 +987,13 @@ var AuthService = class extends BaseService {
1066
987
  if (this._tokenManager) {
1067
988
  this._tokenManager.setTokens(tokenData);
1068
989
  }
1069
- this.updateContext({ authToken: tokens.accessToken });
1070
990
  }
1071
991
  if (response.success) {
1072
992
  return response.data;
1073
993
  }
1074
994
  throw new Error(response.message);
1075
995
  } catch (error) {
1076
- throw new Error(`GitHub auth failed: ${error.message}`);
996
+ throw new Error(`GitHub auth failed: ${error.message}`, { cause: error });
1077
997
  }
1078
998
  }
1079
999
  async googleAuthCallback(code, redirectUri, inviteToken = null) {
@@ -1099,14 +1019,13 @@ var AuthService = class extends BaseService {
1099
1019
  if (this._tokenManager) {
1100
1020
  this._tokenManager.setTokens(tokenData);
1101
1021
  }
1102
- this.updateContext({ authToken: tokens.accessToken });
1103
1022
  }
1104
1023
  if (response.success) {
1105
1024
  return response.data;
1106
1025
  }
1107
1026
  throw new Error(response.message);
1108
1027
  } catch (error) {
1109
- throw new Error(`Google auth callback failed: ${error.message}`);
1028
+ throw new Error(`Google auth callback failed: ${error.message}`, { cause: error });
1110
1029
  }
1111
1030
  }
1112
1031
  async requestPasswordReset(email) {
@@ -1121,7 +1040,7 @@ var AuthService = class extends BaseService {
1121
1040
  }
1122
1041
  throw new Error(response.message);
1123
1042
  } catch (error) {
1124
- throw new Error(`Password reset request failed: ${error.message}`);
1043
+ throw new Error(`Password reset request failed: ${error.message}`, { cause: error });
1125
1044
  }
1126
1045
  }
1127
1046
  async confirmPasswordReset(token, password) {
@@ -1136,7 +1055,7 @@ var AuthService = class extends BaseService {
1136
1055
  }
1137
1056
  throw new Error(response.message);
1138
1057
  } catch (error) {
1139
- throw new Error(`Password reset confirmation failed: ${error.message}`);
1058
+ throw new Error(`Password reset confirmation failed: ${error.message}`, { cause: error });
1140
1059
  }
1141
1060
  }
1142
1061
  async confirmRegistration(token) {
@@ -1151,7 +1070,7 @@ var AuthService = class extends BaseService {
1151
1070
  }
1152
1071
  throw new Error(response.message);
1153
1072
  } catch (error) {
1154
- throw new Error(`Registration confirmation failed: ${error.message}`);
1073
+ throw new Error(`Registration confirmation failed: ${error.message}`, { cause: error });
1155
1074
  }
1156
1075
  }
1157
1076
  async requestPasswordChange() {
@@ -1166,7 +1085,7 @@ var AuthService = class extends BaseService {
1166
1085
  }
1167
1086
  throw new Error(response.message);
1168
1087
  } catch (error) {
1169
- throw new Error(`Password change request failed: ${error.message}`);
1088
+ throw new Error(`Password change request failed: ${error.message}`, { cause: error });
1170
1089
  }
1171
1090
  }
1172
1091
  async confirmPasswordChange(currentPassword, newPassword, code) {
@@ -1182,7 +1101,7 @@ var AuthService = class extends BaseService {
1182
1101
  }
1183
1102
  throw new Error(response.message);
1184
1103
  } catch (error) {
1185
- throw new Error(`Password change confirmation failed: ${error.message}`);
1104
+ throw new Error(`Password change confirmation failed: ${error.message}`, { cause: error });
1186
1105
  }
1187
1106
  }
1188
1107
  async getMe() {
@@ -1197,7 +1116,7 @@ var AuthService = class extends BaseService {
1197
1116
  }
1198
1117
  throw new Error(response.message);
1199
1118
  } catch (error) {
1200
- throw new Error(`Failed to get user profile: ${error.message}`);
1119
+ throw new Error(`Failed to get user profile: ${error.message}`, { cause: error });
1201
1120
  }
1202
1121
  }
1203
1122
  /**
@@ -1297,7 +1216,7 @@ var AuthService = class extends BaseService {
1297
1216
  }
1298
1217
  throw new Error(response.message);
1299
1218
  } catch (error) {
1300
- throw new Error(`Failed to get user profile: ${error.message}`);
1219
+ throw new Error(`Failed to get user profile: ${error.message}`, { cause: error });
1301
1220
  }
1302
1221
  }
1303
1222
  async updateUserProfile(profileData) {
@@ -1313,7 +1232,7 @@ var AuthService = class extends BaseService {
1313
1232
  }
1314
1233
  throw new Error(response.message);
1315
1234
  } catch (error) {
1316
- throw new Error(`Failed to update user profile: ${error.message}`);
1235
+ throw new Error(`Failed to update user profile: ${error.message}`, { cause: error });
1317
1236
  }
1318
1237
  }
1319
1238
  async getUserProjects() {
@@ -1336,7 +1255,7 @@ var AuthService = class extends BaseService {
1336
1255
  }
1337
1256
  throw new Error(response.message);
1338
1257
  } catch (error) {
1339
- throw new Error(`Failed to get user projects: ${error.message}`);
1258
+ throw new Error(`Failed to get user projects: ${error.message}`, { cause: error });
1340
1259
  }
1341
1260
  }
1342
1261
  async getUser(userId) {
@@ -1354,7 +1273,7 @@ var AuthService = class extends BaseService {
1354
1273
  }
1355
1274
  throw new Error(response.message);
1356
1275
  } catch (error) {
1357
- throw new Error(`Failed to get user: ${error.message}`);
1276
+ throw new Error(`Failed to get user: ${error.message}`, { cause: error });
1358
1277
  }
1359
1278
  }
1360
1279
  async getUserByEmail(email) {
@@ -1372,7 +1291,7 @@ var AuthService = class extends BaseService {
1372
1291
  }
1373
1292
  throw new Error(response.message);
1374
1293
  } catch (error) {
1375
- throw new Error(`Failed to get user by email: ${error.message}`);
1294
+ throw new Error(`Failed to get user by email: ${error.message}`, { cause: error });
1376
1295
  }
1377
1296
  }
1378
1297
  // ==================== PROJECT ROLE METHODS ====================
@@ -1385,6 +1304,9 @@ var AuthService = class extends BaseService {
1385
1304
  if (!projectId) {
1386
1305
  throw new Error("Project ID is required");
1387
1306
  }
1307
+ if (!this.hasValidTokens()) {
1308
+ return "guest";
1309
+ }
1388
1310
  const cacheKey = `role_${projectId}`;
1389
1311
  const cached = this._projectRoleCache.get(cacheKey);
1390
1312
  if (cached && Date.now() - cached.timestamp < this._roleCacheExpiry) {
@@ -1405,7 +1327,11 @@ var AuthService = class extends BaseService {
1405
1327
  }
1406
1328
  throw new Error(response.message);
1407
1329
  } catch (error) {
1408
- throw new Error(`Failed to get project role: ${error.message}`);
1330
+ const message = (error == null ? void 0 : error.message) || "";
1331
+ if (/401|403|unauthorized|no token|invalid token/iu.test(message)) {
1332
+ return "guest";
1333
+ }
1334
+ throw new Error(`Failed to get project role: ${message}`, { cause: error });
1409
1335
  }
1410
1336
  }
1411
1337
  /**
@@ -1417,6 +1343,9 @@ var AuthService = class extends BaseService {
1417
1343
  if (!projectKey) {
1418
1344
  throw new Error("Project key is required");
1419
1345
  }
1346
+ if (!this.hasValidTokens()) {
1347
+ return "guest";
1348
+ }
1420
1349
  const cacheKey = `role_key_${projectKey}`;
1421
1350
  const cached = this._projectRoleCache.get(cacheKey);
1422
1351
  if (cached && Date.now() - cached.timestamp < this._roleCacheExpiry) {
@@ -1437,7 +1366,11 @@ var AuthService = class extends BaseService {
1437
1366
  }
1438
1367
  throw new Error(response.message);
1439
1368
  } catch (error) {
1440
- throw new Error(`Failed to get project role by key: ${error.message}`);
1369
+ const message = (error == null ? void 0 : error.message) || "";
1370
+ if (/401|403|unauthorized|no token|invalid token/iu.test(message)) {
1371
+ return "guest";
1372
+ }
1373
+ throw new Error(`Failed to get project role by key: ${message}`, { cause: error });
1441
1374
  }
1442
1375
  }
1443
1376
  /**
@@ -1540,7 +1473,7 @@ var AuthService = class extends BaseService {
1540
1473
  try {
1541
1474
  return await this.getMe();
1542
1475
  } catch (error) {
1543
- throw new Error(`Failed to get current user: ${error.message}`);
1476
+ throw new Error(`Failed to get current user: ${error.message}`, { cause: error });
1544
1477
  }
1545
1478
  }
1546
1479
  /**
@@ -1697,7 +1630,6 @@ var AuthService = class extends BaseService {
1697
1630
  this._tokenManager = null;
1698
1631
  }
1699
1632
  this._projectRoleCache.clear();
1700
- this._initialized = false;
1701
1633
  this._setReady(false);
1702
1634
  }
1703
1635
  };