@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.
- package/dist/cjs/config/environment.js +43 -8
- package/dist/cjs/index.js +12 -4
- package/dist/cjs/services/AdminService.js +4 -4
- package/dist/cjs/services/AuthService.js +36 -149
- package/dist/cjs/services/BaseService.js +5 -18
- package/dist/cjs/services/BranchService.js +10 -10
- package/dist/cjs/services/CollabService.js +94 -61
- package/dist/cjs/services/CoreService.js +19 -19
- package/dist/cjs/services/DnsService.js +4 -4
- package/dist/cjs/services/FileService.js +2 -2
- package/dist/cjs/services/PaymentService.js +2 -2
- package/dist/cjs/services/PlanService.js +12 -12
- package/dist/cjs/services/ProjectService.js +45 -35
- package/dist/cjs/services/PullRequestService.js +7 -7
- package/dist/cjs/services/ScreenshotService.js +304 -0
- package/dist/cjs/services/SubscriptionService.js +14 -14
- package/dist/cjs/services/index.js +4 -0
- package/dist/cjs/utils/TokenManager.js +16 -5
- package/dist/cjs/utils/changePreprocessor.js +134 -0
- package/dist/cjs/utils/jsonDiff.js +46 -4
- package/dist/cjs/utils/ordering.js +274 -0
- package/dist/cjs/utils/services.js +14 -1
- package/dist/esm/config/environment.js +43 -8
- package/dist/esm/index.js +1099 -417
- package/dist/esm/services/AdminService.js +68 -35
- package/dist/esm/services/AuthService.js +100 -168
- package/dist/esm/services/BaseService.js +64 -31
- package/dist/esm/services/BranchService.js +74 -41
- package/dist/esm/services/CollabService.js +570 -97
- package/dist/esm/services/CoreService.js +83 -50
- package/dist/esm/services/DnsService.js +68 -35
- package/dist/esm/services/FileService.js +66 -33
- package/dist/esm/services/PaymentService.js +66 -33
- package/dist/esm/services/PlanService.js +76 -43
- package/dist/esm/services/ProjectService.js +547 -66
- package/dist/esm/services/PullRequestService.js +71 -38
- package/dist/esm/services/ScreenshotService.js +992 -0
- package/dist/esm/services/SubscriptionService.js +78 -45
- package/dist/esm/services/index.js +1076 -412
- package/dist/esm/utils/CollabClient.js +89 -12
- package/dist/esm/utils/TokenManager.js +16 -5
- package/dist/esm/utils/changePreprocessor.js +442 -0
- package/dist/esm/utils/jsonDiff.js +46 -4
- package/dist/esm/utils/ordering.js +256 -0
- package/dist/esm/utils/services.js +14 -1
- package/dist/node/config/environment.js +43 -8
- package/dist/node/index.js +14 -5
- package/dist/node/services/AdminService.js +4 -4
- package/dist/node/services/AuthService.js +36 -139
- package/dist/node/services/BaseService.js +5 -18
- package/dist/node/services/BranchService.js +10 -10
- package/dist/node/services/CollabService.js +95 -62
- package/dist/node/services/CoreService.js +19 -19
- package/dist/node/services/DnsService.js +4 -4
- package/dist/node/services/FileService.js +2 -2
- package/dist/node/services/PaymentService.js +2 -2
- package/dist/node/services/PlanService.js +12 -12
- package/dist/node/services/ProjectService.js +45 -35
- package/dist/node/services/PullRequestService.js +7 -7
- package/dist/node/services/ScreenshotService.js +285 -0
- package/dist/node/services/SubscriptionService.js +14 -14
- package/dist/node/services/index.js +4 -0
- package/dist/node/utils/TokenManager.js +16 -5
- package/dist/node/utils/changePreprocessor.js +115 -0
- package/dist/node/utils/jsonDiff.js +46 -4
- package/dist/node/utils/ordering.js +255 -0
- package/dist/node/utils/services.js +14 -1
- package/package.json +7 -6
- package/src/config/environment.js +48 -9
- package/src/index.js +38 -22
- package/src/services/AdminService.js +4 -4
- package/src/services/AuthService.js +42 -175
- package/src/services/BaseService.js +7 -24
- package/src/services/BranchService.js +10 -10
- package/src/services/CollabService.js +115 -74
- package/src/services/CoreService.js +19 -19
- package/src/services/DnsService.js +4 -4
- package/src/services/FileService.js +2 -2
- package/src/services/PaymentService.js +2 -2
- package/src/services/PlanService.js +12 -12
- package/src/services/ProjectService.js +50 -35
- package/src/services/PullRequestService.js +7 -7
- package/src/services/ScreenshotService.js +258 -0
- package/src/services/SubscriptionService.js +14 -14
- package/src/services/index.js +6 -1
- package/src/utils/TokenManager.js +19 -5
- package/src/utils/changePreprocessor.js +139 -0
- package/src/utils/jsonDiff.js +40 -5
- package/src/utils/ordering.js +244 -0
- package/src/utils/services.js +15 -1
|
@@ -46,18 +46,28 @@ const CONFIG = {
|
|
|
46
46
|
// For based api
|
|
47
47
|
basedOrg: "symbols",
|
|
48
48
|
// For based api
|
|
49
|
-
githubClientId: "
|
|
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.
|
|
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
|
-
...
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|