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