@symbo.ls/sdk 3.1.1 → 3.2.3
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/README.md +174 -13
- package/dist/cjs/config/environment.js +32 -42
- package/dist/cjs/index.js +31 -24
- package/dist/cjs/services/AIService.js +3 -3
- package/dist/cjs/services/AuthService.js +44 -3
- package/dist/cjs/services/BasedService.js +530 -24
- package/dist/cjs/services/CollabService.js +420 -0
- package/dist/cjs/services/CoreService.js +2295 -0
- package/dist/cjs/services/SocketService.js +207 -59
- package/dist/cjs/services/SymstoryService.js +135 -49
- package/dist/cjs/services/index.js +8 -16
- package/dist/cjs/state/RootStateManager.js +86 -0
- package/dist/cjs/state/rootEventBus.js +65 -0
- package/dist/cjs/utils/CollabClient.js +157 -0
- package/dist/cjs/utils/TokenManager.js +409 -0
- package/dist/cjs/utils/basedQuerys.js +120 -0
- package/dist/cjs/utils/jsonDiff.js +103 -0
- package/dist/cjs/utils/permission.js +4 -4
- package/dist/cjs/utils/services.js +133 -69
- package/dist/cjs/utils/symstoryClient.js +33 -2
- package/dist/esm/config/environment.js +32 -42
- package/dist/esm/index.js +20586 -11525
- package/dist/esm/services/AIService.js +3 -3
- package/dist/esm/services/AuthService.js +48 -7
- package/dist/esm/services/BasedService.js +676 -65
- package/dist/esm/services/CollabService.js +18028 -0
- package/dist/esm/services/CoreService.js +2827 -0
- package/dist/esm/services/SocketService.js +323 -58
- package/dist/esm/services/SymstoryService.js +287 -111
- package/dist/esm/services/index.js +20456 -11470
- package/dist/esm/state/RootStateManager.js +102 -0
- package/dist/esm/state/rootEventBus.js +47 -0
- package/dist/esm/utils/CollabClient.js +17483 -0
- package/dist/esm/utils/TokenManager.js +395 -0
- package/dist/esm/utils/basedQuerys.js +120 -0
- package/dist/esm/utils/jsonDiff.js +6096 -0
- package/dist/esm/utils/permission.js +4 -4
- package/dist/esm/utils/services.js +133 -69
- package/dist/esm/utils/symstoryClient.js +63 -43
- package/dist/esm/utils/validation.js +89 -19
- package/dist/node/config/environment.js +32 -42
- package/dist/node/index.js +37 -28
- package/dist/node/services/AIService.js +3 -3
- package/dist/node/services/AuthService.js +44 -3
- package/dist/node/services/BasedService.js +531 -25
- package/dist/node/services/CollabService.js +401 -0
- package/dist/node/services/CoreService.js +2266 -0
- package/dist/node/services/SocketService.js +197 -59
- package/dist/node/services/SymstoryService.js +135 -49
- package/dist/node/services/index.js +8 -16
- package/dist/node/state/RootStateManager.js +57 -0
- package/dist/node/state/rootEventBus.js +46 -0
- package/dist/node/utils/CollabClient.js +128 -0
- package/dist/node/utils/TokenManager.js +390 -0
- package/dist/node/utils/basedQuerys.js +120 -0
- package/dist/node/utils/jsonDiff.js +74 -0
- package/dist/node/utils/permission.js +4 -4
- package/dist/node/utils/services.js +133 -69
- package/dist/node/utils/symstoryClient.js +33 -2
- package/package.json +23 -14
- package/src/config/environment.js +33 -42
- package/src/index.js +45 -28
- package/src/services/AIService.js +3 -3
- package/src/services/AuthService.js +52 -3
- package/src/services/BasedService.js +603 -23
- package/src/services/CollabService.js +491 -0
- package/src/services/CoreService.js +2548 -0
- package/src/services/SocketService.js +227 -59
- package/src/services/SymstoryService.js +150 -64
- package/src/services/index.js +7 -14
- package/src/state/RootStateManager.js +71 -0
- package/src/state/rootEventBus.js +48 -0
- package/src/utils/CollabClient.js +161 -0
- package/src/utils/TokenManager.js +462 -0
- package/src/utils/basedQuerys.js +123 -0
- package/src/utils/jsonDiff.js +109 -0
- package/src/utils/permission.js +4 -4
- package/src/utils/services.js +144 -69
- package/src/utils/symstoryClient.js +36 -2
- package/dist/cjs/services/SocketIOService.js +0 -309
- package/dist/esm/services/SocketIOService.js +0 -467
- package/dist/node/services/SocketIOService.js +0 -280
- package/src/services/SocketIOService.js +0 -356
|
@@ -0,0 +1,395 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
3
|
+
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
4
|
+
|
|
5
|
+
// src/utils/TokenManager.js
|
|
6
|
+
var TokenManager = class {
|
|
7
|
+
constructor(options = {}) {
|
|
8
|
+
/**
|
|
9
|
+
* Memory storage fallback for server-side rendering
|
|
10
|
+
*/
|
|
11
|
+
__publicField(this, "_memoryStorage", {
|
|
12
|
+
_data: {},
|
|
13
|
+
getItem: (key) => this._memoryStorage._data[key] || null,
|
|
14
|
+
setItem: (key, value) => {
|
|
15
|
+
this._memoryStorage._data[key] = value;
|
|
16
|
+
},
|
|
17
|
+
removeItem: (key) => {
|
|
18
|
+
delete this._memoryStorage._data[key];
|
|
19
|
+
},
|
|
20
|
+
clear: () => {
|
|
21
|
+
this._memoryStorage._data = {};
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
this.config = {
|
|
25
|
+
storagePrefix: "symbols_",
|
|
26
|
+
storageType: "localStorage",
|
|
27
|
+
// 'localStorage' | 'sessionStorage' | 'memory'
|
|
28
|
+
refreshBuffer: 60 * 1e3,
|
|
29
|
+
// Refresh 1 minute before expiry
|
|
30
|
+
maxRetries: 3,
|
|
31
|
+
apiUrl: options.apiUrl || "/api",
|
|
32
|
+
onTokenRefresh: options.onTokenRefresh || null,
|
|
33
|
+
onTokenExpired: options.onTokenExpired || null,
|
|
34
|
+
onTokenError: options.onTokenError || null,
|
|
35
|
+
...options
|
|
36
|
+
};
|
|
37
|
+
this.tokens = {
|
|
38
|
+
accessToken: null,
|
|
39
|
+
refreshToken: null,
|
|
40
|
+
expiresAt: null,
|
|
41
|
+
expiresIn: null
|
|
42
|
+
};
|
|
43
|
+
this.refreshPromise = null;
|
|
44
|
+
this.refreshTimeout = null;
|
|
45
|
+
this.retryCount = 0;
|
|
46
|
+
this.loadTokens();
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Storage keys
|
|
50
|
+
*/
|
|
51
|
+
get storageKeys() {
|
|
52
|
+
return {
|
|
53
|
+
accessToken: `${this.config.storagePrefix}access_token`,
|
|
54
|
+
refreshToken: `${this.config.storagePrefix}refresh_token`,
|
|
55
|
+
expiresAt: `${this.config.storagePrefix}expires_at`,
|
|
56
|
+
expiresIn: `${this.config.storagePrefix}expires_in`
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Get storage instance based on configuration
|
|
61
|
+
*/
|
|
62
|
+
get storage() {
|
|
63
|
+
if (typeof window === "undefined") {
|
|
64
|
+
return this._memoryStorage;
|
|
65
|
+
}
|
|
66
|
+
switch (this.config.storageType) {
|
|
67
|
+
case "sessionStorage":
|
|
68
|
+
return window.sessionStorage;
|
|
69
|
+
case "memory":
|
|
70
|
+
return this._memoryStorage;
|
|
71
|
+
default:
|
|
72
|
+
return window.localStorage;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Set tokens and persist to storage
|
|
77
|
+
*/
|
|
78
|
+
setTokens(tokenData) {
|
|
79
|
+
const {
|
|
80
|
+
access_token: accessToken,
|
|
81
|
+
refresh_token: refreshToken,
|
|
82
|
+
expires_in: expiresIn,
|
|
83
|
+
token_type: tokenType = "Bearer"
|
|
84
|
+
} = tokenData;
|
|
85
|
+
if (!accessToken) {
|
|
86
|
+
throw new Error("Access token is required");
|
|
87
|
+
}
|
|
88
|
+
const now = Date.now();
|
|
89
|
+
const expiresAt = expiresIn ? now + expiresIn * 1e3 : null;
|
|
90
|
+
this.tokens = {
|
|
91
|
+
accessToken,
|
|
92
|
+
refreshToken: refreshToken || this.tokens.refreshToken,
|
|
93
|
+
expiresAt,
|
|
94
|
+
expiresIn,
|
|
95
|
+
tokenType
|
|
96
|
+
};
|
|
97
|
+
this.saveTokens();
|
|
98
|
+
this.scheduleRefresh();
|
|
99
|
+
if (this.config.onTokenRefresh) {
|
|
100
|
+
this.config.onTokenRefresh(this.tokens);
|
|
101
|
+
}
|
|
102
|
+
return this.tokens;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Get current access token
|
|
106
|
+
*/
|
|
107
|
+
getAccessToken() {
|
|
108
|
+
return this.tokens.accessToken;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Get current refresh token
|
|
112
|
+
*/
|
|
113
|
+
getRefreshToken() {
|
|
114
|
+
return this.tokens.refreshToken;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Get authorization header value
|
|
118
|
+
*/
|
|
119
|
+
getAuthHeader() {
|
|
120
|
+
const token = this.getAccessToken();
|
|
121
|
+
if (!token) {
|
|
122
|
+
return null;
|
|
123
|
+
}
|
|
124
|
+
return `${this.tokens.tokenType || "Bearer"} ${token}`;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Check if access token is valid and not expired
|
|
128
|
+
*/
|
|
129
|
+
isAccessTokenValid() {
|
|
130
|
+
if (!this.tokens.accessToken) {
|
|
131
|
+
return false;
|
|
132
|
+
}
|
|
133
|
+
if (!this.tokens.expiresAt) {
|
|
134
|
+
return true;
|
|
135
|
+
}
|
|
136
|
+
const now = Date.now();
|
|
137
|
+
const isValid = now < this.tokens.expiresAt - this.config.refreshBuffer;
|
|
138
|
+
if (!isValid) {
|
|
139
|
+
console.log("[TokenManager] Access token is expired or near expiry:", {
|
|
140
|
+
now: new Date(now).toISOString(),
|
|
141
|
+
expiresAt: new Date(this.tokens.expiresAt).toISOString(),
|
|
142
|
+
refreshBuffer: this.config.refreshBuffer
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
return isValid;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Check if access token exists and is not expired (without refresh buffer)
|
|
149
|
+
*/
|
|
150
|
+
isAccessTokenActuallyValid() {
|
|
151
|
+
if (!this.tokens.accessToken) {
|
|
152
|
+
return false;
|
|
153
|
+
}
|
|
154
|
+
if (!this.tokens.expiresAt) {
|
|
155
|
+
return true;
|
|
156
|
+
}
|
|
157
|
+
const now = Date.now();
|
|
158
|
+
return now < this.tokens.expiresAt;
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Check if tokens exist (regardless of expiry)
|
|
162
|
+
*/
|
|
163
|
+
hasTokens() {
|
|
164
|
+
return Boolean(this.tokens.accessToken);
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Check if refresh token exists
|
|
168
|
+
*/
|
|
169
|
+
hasRefreshToken() {
|
|
170
|
+
return Boolean(this.tokens.refreshToken);
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Automatically refresh tokens if needed
|
|
174
|
+
*/
|
|
175
|
+
async ensureValidToken() {
|
|
176
|
+
if (!this.hasTokens()) {
|
|
177
|
+
return null;
|
|
178
|
+
}
|
|
179
|
+
if (this.isAccessTokenValid()) {
|
|
180
|
+
return this.getAccessToken();
|
|
181
|
+
}
|
|
182
|
+
if (!this.hasRefreshToken()) {
|
|
183
|
+
this.clearTokens();
|
|
184
|
+
if (this.config.onTokenExpired) {
|
|
185
|
+
this.config.onTokenExpired();
|
|
186
|
+
}
|
|
187
|
+
return null;
|
|
188
|
+
}
|
|
189
|
+
try {
|
|
190
|
+
await this.refreshTokens();
|
|
191
|
+
return this.getAccessToken();
|
|
192
|
+
} catch (error) {
|
|
193
|
+
this.clearTokens();
|
|
194
|
+
if (this.config.onTokenError) {
|
|
195
|
+
this.config.onTokenError(error);
|
|
196
|
+
}
|
|
197
|
+
throw error;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Refresh access token using refresh token
|
|
202
|
+
*/
|
|
203
|
+
async refreshTokens() {
|
|
204
|
+
if (this.refreshPromise) {
|
|
205
|
+
return this.refreshPromise;
|
|
206
|
+
}
|
|
207
|
+
if (!this.hasRefreshToken()) {
|
|
208
|
+
throw new Error("No refresh token available");
|
|
209
|
+
}
|
|
210
|
+
if (this.retryCount >= this.config.maxRetries) {
|
|
211
|
+
throw new Error("Max refresh retries exceeded");
|
|
212
|
+
}
|
|
213
|
+
this.refreshPromise = this._performRefresh();
|
|
214
|
+
try {
|
|
215
|
+
const result = await this.refreshPromise;
|
|
216
|
+
this.retryCount = 0;
|
|
217
|
+
return result;
|
|
218
|
+
} catch (error) {
|
|
219
|
+
this.retryCount++;
|
|
220
|
+
throw error;
|
|
221
|
+
} finally {
|
|
222
|
+
this.refreshPromise = null;
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Perform the actual token refresh request
|
|
227
|
+
*/
|
|
228
|
+
async _performRefresh() {
|
|
229
|
+
var _a;
|
|
230
|
+
const refreshToken = this.getRefreshToken();
|
|
231
|
+
const response = await fetch(`${this.config.apiUrl}/core/auth/refresh`, {
|
|
232
|
+
method: "POST",
|
|
233
|
+
headers: {
|
|
234
|
+
"Content-Type": "application/json"
|
|
235
|
+
},
|
|
236
|
+
body: JSON.stringify({ refreshToken })
|
|
237
|
+
});
|
|
238
|
+
if (!response.ok) {
|
|
239
|
+
const errorData = await response.json().catch(() => ({}));
|
|
240
|
+
throw new Error(errorData.message || `Token refresh failed: ${response.status}`);
|
|
241
|
+
}
|
|
242
|
+
const responseData = await response.json();
|
|
243
|
+
if (responseData.success && responseData.data && responseData.data.tokens) {
|
|
244
|
+
const { tokens } = responseData.data;
|
|
245
|
+
const tokenData = {
|
|
246
|
+
access_token: tokens.accessToken,
|
|
247
|
+
refresh_token: tokens.refreshToken,
|
|
248
|
+
expires_in: (_a = tokens.accessTokenExp) == null ? void 0 : _a.expiresIn,
|
|
249
|
+
token_type: "Bearer"
|
|
250
|
+
};
|
|
251
|
+
return this.setTokens(tokenData);
|
|
252
|
+
}
|
|
253
|
+
return this.setTokens(responseData);
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Schedule automatic token refresh
|
|
257
|
+
*/
|
|
258
|
+
scheduleRefresh() {
|
|
259
|
+
if (this.refreshTimeout) {
|
|
260
|
+
clearTimeout(this.refreshTimeout);
|
|
261
|
+
this.refreshTimeout = null;
|
|
262
|
+
}
|
|
263
|
+
if (!this.tokens.expiresAt || !this.hasRefreshToken()) {
|
|
264
|
+
return;
|
|
265
|
+
}
|
|
266
|
+
const now = Date.now();
|
|
267
|
+
const refreshTime = this.tokens.expiresAt - this.config.refreshBuffer;
|
|
268
|
+
const delay = Math.max(0, refreshTime - now);
|
|
269
|
+
this.refreshTimeout = setTimeout(async () => {
|
|
270
|
+
try {
|
|
271
|
+
await this.refreshTokens();
|
|
272
|
+
} catch (error) {
|
|
273
|
+
console.error("Automatic token refresh failed:", error);
|
|
274
|
+
if (this.config.onTokenError) {
|
|
275
|
+
this.config.onTokenError(error);
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
}, delay);
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Save tokens to storage
|
|
282
|
+
*/
|
|
283
|
+
saveTokens() {
|
|
284
|
+
try {
|
|
285
|
+
const { storage } = this;
|
|
286
|
+
const keys = this.storageKeys;
|
|
287
|
+
if (this.tokens.accessToken) {
|
|
288
|
+
storage.setItem(keys.accessToken, this.tokens.accessToken);
|
|
289
|
+
}
|
|
290
|
+
if (this.tokens.refreshToken) {
|
|
291
|
+
storage.setItem(keys.refreshToken, this.tokens.refreshToken);
|
|
292
|
+
}
|
|
293
|
+
if (this.tokens.expiresAt) {
|
|
294
|
+
storage.setItem(keys.expiresAt, this.tokens.expiresAt.toString());
|
|
295
|
+
}
|
|
296
|
+
if (this.tokens.expiresIn) {
|
|
297
|
+
storage.setItem(keys.expiresIn, this.tokens.expiresIn.toString());
|
|
298
|
+
}
|
|
299
|
+
} catch (error) {
|
|
300
|
+
console.error("[TokenManager] Error saving tokens to storage:", error);
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* Load tokens from storage
|
|
305
|
+
*/
|
|
306
|
+
loadTokens() {
|
|
307
|
+
try {
|
|
308
|
+
const { storage } = this;
|
|
309
|
+
const keys = this.storageKeys;
|
|
310
|
+
const accessToken = storage.getItem(keys.accessToken);
|
|
311
|
+
const refreshToken = storage.getItem(keys.refreshToken);
|
|
312
|
+
const expiresAt = storage.getItem(keys.expiresAt);
|
|
313
|
+
const expiresIn = storage.getItem(keys.expiresIn);
|
|
314
|
+
if (accessToken) {
|
|
315
|
+
this.tokens = {
|
|
316
|
+
accessToken,
|
|
317
|
+
refreshToken,
|
|
318
|
+
expiresAt: expiresAt ? parseInt(expiresAt, 10) : null,
|
|
319
|
+
expiresIn: expiresIn ? parseInt(expiresIn, 10) : null,
|
|
320
|
+
tokenType: "Bearer"
|
|
321
|
+
};
|
|
322
|
+
this.scheduleRefresh();
|
|
323
|
+
}
|
|
324
|
+
} catch (error) {
|
|
325
|
+
console.error("[TokenManager] Error loading tokens from storage:", error);
|
|
326
|
+
this.tokens = {
|
|
327
|
+
accessToken: null,
|
|
328
|
+
refreshToken: null,
|
|
329
|
+
expiresAt: null,
|
|
330
|
+
expiresIn: null
|
|
331
|
+
};
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
/**
|
|
335
|
+
* Clear all tokens
|
|
336
|
+
*/
|
|
337
|
+
clearTokens() {
|
|
338
|
+
this.tokens = {
|
|
339
|
+
accessToken: null,
|
|
340
|
+
refreshToken: null,
|
|
341
|
+
expiresAt: null,
|
|
342
|
+
expiresIn: null
|
|
343
|
+
};
|
|
344
|
+
const { storage } = this;
|
|
345
|
+
const keys = this.storageKeys;
|
|
346
|
+
Object.values(keys).forEach((key) => {
|
|
347
|
+
storage.removeItem(key);
|
|
348
|
+
});
|
|
349
|
+
if (this.refreshTimeout) {
|
|
350
|
+
clearTimeout(this.refreshTimeout);
|
|
351
|
+
this.refreshTimeout = null;
|
|
352
|
+
}
|
|
353
|
+
this.retryCount = 0;
|
|
354
|
+
}
|
|
355
|
+
/**
|
|
356
|
+
* Get token status information
|
|
357
|
+
*/
|
|
358
|
+
getTokenStatus() {
|
|
359
|
+
const hasTokens = this.hasTokens();
|
|
360
|
+
const isValid = this.isAccessTokenValid();
|
|
361
|
+
const { expiresAt } = this.tokens;
|
|
362
|
+
const timeToExpiry = expiresAt ? expiresAt - Date.now() : null;
|
|
363
|
+
return {
|
|
364
|
+
hasTokens,
|
|
365
|
+
isValid,
|
|
366
|
+
hasRefreshToken: this.hasRefreshToken(),
|
|
367
|
+
expiresAt,
|
|
368
|
+
timeToExpiry,
|
|
369
|
+
willExpireSoon: timeToExpiry ? timeToExpiry < this.config.refreshBuffer : false
|
|
370
|
+
};
|
|
371
|
+
}
|
|
372
|
+
/**
|
|
373
|
+
* Cleanup resources
|
|
374
|
+
*/
|
|
375
|
+
destroy() {
|
|
376
|
+
if (this.refreshTimeout) {
|
|
377
|
+
clearTimeout(this.refreshTimeout);
|
|
378
|
+
this.refreshTimeout = null;
|
|
379
|
+
}
|
|
380
|
+
this.refreshPromise = null;
|
|
381
|
+
}
|
|
382
|
+
};
|
|
383
|
+
var defaultTokenManager = null;
|
|
384
|
+
var getTokenManager = (options) => {
|
|
385
|
+
if (!defaultTokenManager) {
|
|
386
|
+
defaultTokenManager = new TokenManager(options);
|
|
387
|
+
}
|
|
388
|
+
return defaultTokenManager;
|
|
389
|
+
};
|
|
390
|
+
var createTokenManager = (options) => new TokenManager(options);
|
|
391
|
+
export {
|
|
392
|
+
TokenManager,
|
|
393
|
+
createTokenManager,
|
|
394
|
+
getTokenManager
|
|
395
|
+
};
|
|
@@ -37,7 +37,127 @@ var buildUserQuery = (userId) => ({
|
|
|
37
37
|
$all: true
|
|
38
38
|
}
|
|
39
39
|
});
|
|
40
|
+
var buildGetUserDataQuery = (userId) => ({
|
|
41
|
+
$id: userId,
|
|
42
|
+
id: true,
|
|
43
|
+
name: true,
|
|
44
|
+
email: true,
|
|
45
|
+
username: true,
|
|
46
|
+
globalRole: true,
|
|
47
|
+
updatedAt: true,
|
|
48
|
+
createdAt: true,
|
|
49
|
+
memberProjects: {
|
|
50
|
+
$list: true,
|
|
51
|
+
id: true,
|
|
52
|
+
role: true,
|
|
53
|
+
createdAt: true,
|
|
54
|
+
updatedAt: true,
|
|
55
|
+
project: {
|
|
56
|
+
id: true,
|
|
57
|
+
key: true,
|
|
58
|
+
name: true,
|
|
59
|
+
thumbnail: true,
|
|
60
|
+
icon: true,
|
|
61
|
+
tier: true,
|
|
62
|
+
visibility: true,
|
|
63
|
+
access: true,
|
|
64
|
+
members: {
|
|
65
|
+
$list: true,
|
|
66
|
+
user: {
|
|
67
|
+
id: true,
|
|
68
|
+
name: true,
|
|
69
|
+
email: true,
|
|
70
|
+
globalRole: true
|
|
71
|
+
},
|
|
72
|
+
role: true,
|
|
73
|
+
updatedAt: true,
|
|
74
|
+
createdAt: true
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
var buildGetProjectsByKeysQuery = (keys) => ({
|
|
80
|
+
projects: {
|
|
81
|
+
id: true,
|
|
82
|
+
key: true,
|
|
83
|
+
name: true,
|
|
84
|
+
thumbnail: true,
|
|
85
|
+
icon: true,
|
|
86
|
+
tier: true,
|
|
87
|
+
visibility: true,
|
|
88
|
+
access: true,
|
|
89
|
+
members: {
|
|
90
|
+
$list: true,
|
|
91
|
+
user: {
|
|
92
|
+
id: true,
|
|
93
|
+
name: true,
|
|
94
|
+
email: true,
|
|
95
|
+
globalRole: true
|
|
96
|
+
},
|
|
97
|
+
role: true,
|
|
98
|
+
updatedAt: true,
|
|
99
|
+
createdAt: true
|
|
100
|
+
},
|
|
101
|
+
$list: {
|
|
102
|
+
$find: {
|
|
103
|
+
$traverse: "children",
|
|
104
|
+
$filter: [
|
|
105
|
+
{ $field: "type", $operator: "=", $value: "project" },
|
|
106
|
+
{ $field: "key", $operator: "=", $value: keys }
|
|
107
|
+
]
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
var GetProjectFields = {
|
|
113
|
+
id: true,
|
|
114
|
+
name: true,
|
|
115
|
+
key: true,
|
|
116
|
+
tier: true,
|
|
117
|
+
projectType: true,
|
|
118
|
+
icon: true,
|
|
119
|
+
package: true,
|
|
120
|
+
seats: true,
|
|
121
|
+
projectPassword: true,
|
|
122
|
+
stripe: true,
|
|
123
|
+
payments: {
|
|
124
|
+
$list: true,
|
|
125
|
+
id: true,
|
|
126
|
+
name: true
|
|
127
|
+
},
|
|
128
|
+
access: true,
|
|
129
|
+
isSharedLibrary: true,
|
|
130
|
+
framework: true,
|
|
131
|
+
designTool: true,
|
|
132
|
+
language: true,
|
|
133
|
+
visibility: true,
|
|
134
|
+
domains: true,
|
|
135
|
+
subscription: { id: true },
|
|
136
|
+
members: {
|
|
137
|
+
$list: true,
|
|
138
|
+
user: { id: true, name: true, email: true },
|
|
139
|
+
role: true
|
|
140
|
+
}
|
|
141
|
+
};
|
|
142
|
+
var buildGetProjectDataQuery = (projectId) => ({
|
|
143
|
+
$id: projectId,
|
|
144
|
+
...GetProjectFields
|
|
145
|
+
});
|
|
146
|
+
var buildGetProjectByKeyDataQuery = (key) => ({
|
|
147
|
+
...GetProjectFields,
|
|
148
|
+
$find: {
|
|
149
|
+
$traverse: "children",
|
|
150
|
+
$filter: [
|
|
151
|
+
{ $field: "type", $operator: "=", $value: "project" },
|
|
152
|
+
{ $field: "key", $operator: "=", $value: key }
|
|
153
|
+
]
|
|
154
|
+
}
|
|
155
|
+
});
|
|
40
156
|
export {
|
|
157
|
+
buildGetProjectByKeyDataQuery,
|
|
158
|
+
buildGetProjectDataQuery,
|
|
159
|
+
buildGetProjectsByKeysQuery,
|
|
160
|
+
buildGetUserDataQuery,
|
|
41
161
|
buildProjectQuery,
|
|
42
162
|
buildUserQuery
|
|
43
163
|
};
|