@teambit/cloud 0.0.389 → 0.0.391

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.
@@ -4,13 +4,69 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.CloudMain = void 0;
7
+ function _harmony() {
8
+ const data = require("@teambit/harmony");
9
+ _harmony = function () {
10
+ return data;
11
+ };
12
+ return data;
13
+ }
7
14
  function _cli() {
8
- const data = require("@teambit/cli");
15
+ const data = _interopRequireWildcard(require("@teambit/cli"));
9
16
  _cli = function () {
10
17
  return data;
11
18
  };
12
19
  return data;
13
20
  }
21
+ function _uuid() {
22
+ const data = require("uuid");
23
+ _uuid = function () {
24
+ return data;
25
+ };
26
+ return data;
27
+ }
28
+ function _chalk() {
29
+ const data = _interopRequireDefault(require("chalk"));
30
+ _chalk = function () {
31
+ return data;
32
+ };
33
+ return data;
34
+ }
35
+ function _os() {
36
+ const data = _interopRequireDefault(require("os"));
37
+ _os = function () {
38
+ return data;
39
+ };
40
+ return data;
41
+ }
42
+ function _open() {
43
+ const data = _interopRequireDefault(require("open"));
44
+ _open = function () {
45
+ return data;
46
+ };
47
+ return data;
48
+ }
49
+ function _scopes() {
50
+ const data = require("@teambit/scopes.scope-descriptor");
51
+ _scopes = function () {
52
+ return data;
53
+ };
54
+ return data;
55
+ }
56
+ function _scopes2() {
57
+ const data = require("@teambit/scopes.scope-id");
58
+ _scopes2 = function () {
59
+ return data;
60
+ };
61
+ return data;
62
+ }
63
+ function _logger() {
64
+ const data = require("@teambit/logger");
65
+ _logger = function () {
66
+ return data;
67
+ };
68
+ return data;
69
+ }
14
70
  function _constants() {
15
71
  const data = require("@teambit/legacy/dist/constants");
16
72
  _constants = function () {
@@ -18,19 +74,208 @@ function _constants() {
18
74
  };
19
75
  return data;
20
76
  }
77
+ function _scope() {
78
+ const data = _interopRequireDefault(require("@teambit/scope"));
79
+ _scope = function () {
80
+ return data;
81
+ };
82
+ return data;
83
+ }
84
+ function _globalFlags() {
85
+ const data = _interopRequireDefault(require("@teambit/legacy/dist/cli/global-flags"));
86
+ _globalFlags = function () {
87
+ return data;
88
+ };
89
+ return data;
90
+ }
91
+ function _graphql() {
92
+ const data = _interopRequireDefault(require("@teambit/graphql"));
93
+ _graphql = function () {
94
+ return data;
95
+ };
96
+ return data;
97
+ }
98
+ function _workspace() {
99
+ const data = _interopRequireDefault(require("@teambit/workspace"));
100
+ _workspace = function () {
101
+ return data;
102
+ };
103
+ return data;
104
+ }
105
+ function _express() {
106
+ const data = require("@teambit/express");
107
+ _express = function () {
108
+ return data;
109
+ };
110
+ return data;
111
+ }
112
+ function _globalConfig() {
113
+ const data = _interopRequireDefault(require("@teambit/global-config"));
114
+ _globalConfig = function () {
115
+ return data;
116
+ };
117
+ return data;
118
+ }
119
+ function _ui() {
120
+ const data = _interopRequireDefault(require("@teambit/ui"));
121
+ _ui = function () {
122
+ return data;
123
+ };
124
+ return data;
125
+ }
21
126
  function _cloud() {
22
- const data = require("./cloud.aspect");
127
+ const data = require("./cloud.graphql");
23
128
  _cloud = function () {
24
129
  return data;
25
130
  };
26
131
  return data;
27
132
  }
133
+ function _cloud2() {
134
+ const data = require("./cloud.aspect");
135
+ _cloud2 = function () {
136
+ return data;
137
+ };
138
+ return data;
139
+ }
140
+ function _login() {
141
+ const data = require("./login.cmd");
142
+ _login = function () {
143
+ return data;
144
+ };
145
+ return data;
146
+ }
147
+ function _logout() {
148
+ const data = require("./logout.cmd");
149
+ _logout = function () {
150
+ return data;
151
+ };
152
+ return data;
153
+ }
154
+ function _whoami() {
155
+ const data = require("./whoami.cmd");
156
+ _whoami = function () {
157
+ return data;
158
+ };
159
+ return data;
160
+ }
161
+ var _class;
162
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
163
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
164
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
165
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
166
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
28
167
  function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
29
168
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : String(i); }
30
169
  function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
31
170
  class CloudMain {
32
- constructor(config) {
171
+ constructor(config, logger, express, workspace, scope, globalConfig, onSuccessLoginSlot) {
33
172
  this.config = config;
173
+ this.logger = logger;
174
+ this.express = express;
175
+ this.workspace = workspace;
176
+ this.scope = scope;
177
+ this.globalConfig = globalConfig;
178
+ this.onSuccessLoginSlot = onSuccessLoginSlot;
179
+ _defineProperty(this, "authListenerByPort", new Map());
180
+ _defineProperty(this, "REDIRECT_URL", void 0);
181
+ }
182
+ setupAuthListener({
183
+ port: portFromParams,
184
+ clientId = (0, _uuid().v4)()
185
+ } = {}) {
186
+ return new Promise((resolve, reject) => {
187
+ const port = portFromParams || this.getLoginPort();
188
+ const existingAuthListener = this.authListenerByPort.get(port);
189
+ if (existingAuthListener) {
190
+ this.logger.debug(`auth server is already running on port ${port}`);
191
+ resolve(existingAuthListener);
192
+ return;
193
+ }
194
+ const expressApp = this.express.createApp();
195
+ this.authListenerByPort.set(port, {
196
+ port,
197
+ clientId
198
+ });
199
+ const authServer = expressApp.listen(port, () => {
200
+ this.logger.debug(`cloud express server started on port ${port}`);
201
+ const existing = this.authListenerByPort.get(port) ?? {};
202
+ this.authListenerByPort.set(port, _objectSpread(_objectSpread({
203
+ port,
204
+ clientId
205
+ }, existing), {}, {
206
+ server: authServer
207
+ }));
208
+ resolve({
209
+ port,
210
+ server: authServer,
211
+ clientId
212
+ });
213
+ }).on('error', err => {
214
+ // @ts-ignore
215
+ const {
216
+ code
217
+ } = err;
218
+ if (code === 'EADDRINUSE') {
219
+ // set up a new auth listener with new port
220
+ this.logger.warn(`port: ${port} already in use for cloud auth listener, trying port ${port + 1}`);
221
+ // eslint-disable-next-line promise/no-promise-in-callback
222
+ this.setupAuthListener({
223
+ port: port + 1
224
+ }).then(resolve).catch(reject);
225
+ return;
226
+ }
227
+ this.logger.error(`cloud express server failed to start on port ${port}`, err);
228
+ reject(err);
229
+ });
230
+ expressApp.get('/', (req, res) => {
231
+ this.logger.debug('cloud.authListener', 'received request', req.query);
232
+ try {
233
+ const {
234
+ clientId: clientIdFromReq,
235
+ redirectUri,
236
+ username: usernameFromReq
237
+ } = req.query;
238
+ const username = typeof usernameFromReq === 'string' ? usernameFromReq : undefined;
239
+ let {
240
+ token
241
+ } = req.query;
242
+ if (Array.isArray(token)) {
243
+ token = token[0];
244
+ }
245
+ if (typeof token !== 'string') {
246
+ res.status(400).send('Invalid token format');
247
+ return res;
248
+ }
249
+ this.globalConfig.setSync(_constants().CFG_USER_TOKEN_KEY, token);
250
+ if (username) this.globalConfig.setSync(_constants().CFG_USER_NAME_KEY, username);
251
+ const onLoggedInFns = this.onSuccessLoginSlot.values();
252
+ onLoggedInFns.forEach(fn => fn({
253
+ username,
254
+ token: token
255
+ }));
256
+ const existing = this.authListenerByPort.get(port) ?? {};
257
+ this.authListenerByPort.set(port, _objectSpread(_objectSpread({
258
+ port,
259
+ server: authServer,
260
+ clientId: clientIdFromReq
261
+ }, existing), {}, {
262
+ username
263
+ }));
264
+ if (this.REDIRECT_URL) return res.redirect(this.REDIRECT_URL);
265
+ if (typeof redirectUri === 'string' && redirectUri) return res.redirect(redirectUri);
266
+ return res.status(200).send('Login successful');
267
+ } catch (err) {
268
+ this.logger.error(`Error on login: ${err}`);
269
+ res.status(CloudMain.ERROR_RESPONSE).send('Login failed');
270
+ reject(err);
271
+ return res;
272
+ }
273
+ });
274
+ });
275
+ }
276
+ registerOnSuccessLogin(onSuccessLoginFn) {
277
+ this.onSuccessLoginSlot.register(onSuccessLoginFn);
278
+ return this;
34
279
  }
35
280
  getCloudDomain() {
36
281
  return this.config.cloudDomain;
@@ -59,13 +304,207 @@ class CloudMain {
59
304
  getHubName() {
60
305
  return this.config.cloudHubName;
61
306
  }
62
- static async provider(_deps, config) {
63
- return new CloudMain(config);
307
+ getLoginPort() {
308
+ return this.config.loginPort || CloudMain.DEFAULT_PORT;
309
+ }
310
+ isLoggedIn() {
311
+ return Boolean(this.getAuthToken());
312
+ }
313
+ getAuthToken() {
314
+ this.globalConfig.invalidateCache();
315
+ const processToken = _globalFlags().default.token;
316
+ const token = processToken || this.globalConfig.getSync(_constants().CFG_USER_TOKEN_KEY);
317
+ if (!token) return null;
318
+ return token;
319
+ }
320
+ getAuthHeader() {
321
+ return {
322
+ Authorization: `Bearer ${this.getAuthToken()}`
323
+ };
324
+ }
325
+ async getCurrentUser() {
326
+ const isLoggedIn = this.isLoggedIn();
327
+ if (!isLoggedIn) {
328
+ return null;
329
+ }
330
+ const route = 'user/user';
331
+ this.logger.debug(`getCurrentUser, url: ${this.getCloudApi()}/${route}`);
332
+ const url = `https://${this.getCloudApi()}/${route}`;
333
+ const opts = {
334
+ method: 'GET',
335
+ headers: _objectSpread({
336
+ 'Content-Type': 'application/json'
337
+ }, this.getAuthHeader())
338
+ };
339
+ return fetch(url, opts).then(async res => {
340
+ if (res.status === 401) {
341
+ return null;
342
+ }
343
+ const response = await res.json();
344
+ return _objectSpread({}, response.payload || {});
345
+ }).catch(err => {
346
+ this.logger.error(`failed to get current user, err: ${err}`);
347
+ return null;
348
+ });
349
+ }
350
+ getUsername() {
351
+ return this.globalConfig.getSync(_constants().CFG_USER_NAME_KEY);
352
+ }
353
+ async getLoginUrl({
354
+ redirectUrl,
355
+ machineName,
356
+ cloudDomain,
357
+ port: portFromParams
358
+ } = {}) {
359
+ const loginUrl = cloudDomain || this.getLoginDomain();
360
+ const port = Number(portFromParams) || this.getLoginPort();
361
+ if (redirectUrl) {
362
+ this.REDIRECT_URL = redirectUrl;
363
+ }
364
+ const authListenerForPort = this.authListenerByPort.get(port);
365
+ if (authListenerForPort) {
366
+ return `${loginUrl}?port=${port}&clientId=${authListenerForPort.clientId}&responseType=token&deviceName=${machineName || _os().default.hostname()}&os=${process.platform}`;
367
+ }
368
+ const authListener = await this.setupAuthListener({
369
+ port
370
+ });
371
+ if (!authListener) return null;
372
+ return encodeURI(`${loginUrl}?port=${port}&clientId=${authListener?.clientId}&responseType=token&deviceName=${machineName || _os().default.hostname()}&os=${process.platform}`);
373
+ }
374
+ logout() {
375
+ this.globalConfig.delSync(_constants().CFG_USER_TOKEN_KEY);
376
+ this.globalConfig.delSync(_constants().CFG_USER_NAME_KEY);
377
+ }
378
+ async whoami() {
379
+ const currentUser = await this.getCurrentUser();
380
+ if (!currentUser?.username) {
381
+ return undefined;
382
+ }
383
+ return currentUser.username;
384
+ }
385
+ async login(port, suppressBrowserLaunch, machineName, cloudDomain, redirectUrl) {
386
+ return new Promise((resolve, reject) => {
387
+ if (this.isLoggedIn()) {
388
+ resolve({
389
+ isAlreadyLoggedIn: true,
390
+ username: this.globalConfig.getSync(_constants().CFG_USER_NAME_KEY),
391
+ token: this.globalConfig.getSync(_constants().CFG_USER_TOKEN_KEY)
392
+ });
393
+ return;
394
+ }
395
+ const promptLogin = async () => {
396
+ this.REDIRECT_URL = redirectUrl;
397
+ this.registerOnSuccessLogin(loggedInParams => resolve({
398
+ username: loggedInParams.username,
399
+ token: loggedInParams.token
400
+ }));
401
+ const loginUrl = await this.getLoginUrl({
402
+ machineName,
403
+ cloudDomain,
404
+ port
405
+ });
406
+ if (!loginUrl) {
407
+ reject(new Error('Failed to get login url'));
408
+ return;
409
+ }
410
+ if (!suppressBrowserLaunch) {
411
+ console.log(_chalk().default.yellow(`Your browser has been opened to visit:\n${loginUrl}`)); // eslint-disable-line no-console
412
+ (0, _open().default)(loginUrl).catch(err => {
413
+ this.logger.error(`failed to open browser on login, err: ${err}`);
414
+ reject(err);
415
+ });
416
+ } else {
417
+ console.log(_chalk().default.yellow(`Go to the following link in your browser::\n${loginUrl}`)); // eslint-disable-line no-console
418
+ }
419
+ };
420
+ try {
421
+ this.setupAuthListener({
422
+ port: Number(port)
423
+ }).then(promptLogin).catch(e => reject(e));
424
+ } catch (err) {
425
+ reject(err);
426
+ }
427
+ });
428
+ }
429
+ async getCloudScopes(scopes) {
430
+ const remotes = await this.scope._legacyRemotes();
431
+ const filteredScopesToFetch = scopes.filter(scope => {
432
+ return _scopes2().ScopeID.isValid(scope) && remotes.isHub(scope);
433
+ });
434
+ const queryResponse = await this.fetchFromSymphonyViaGQL(CloudMain.GET_SCOPES, {
435
+ ids: filteredScopesToFetch
436
+ });
437
+ const scopesFromQuery = queryResponse?.data?.getScopes;
438
+ if (!scopesFromQuery) return [];
439
+ return scopesFromQuery.map(scope => {
440
+ const scopeDescriptorObj = _objectSpread(_objectSpread({}, scope), {}, {
441
+ id: _scopes2().ScopeID.fromString(scope.id)
442
+ });
443
+ return _scopes().ScopeDescriptor.fromObject(scopeDescriptorObj);
444
+ });
445
+ }
446
+ async fetchFromSymphonyViaGQL(query, variables) {
447
+ if (!this.isLoggedIn()) return null;
448
+ const graphqlUrl = `https://${this.getCloudApi()}${CloudMain.GRAPHQL_ENDPOINT}`;
449
+ const body = JSON.stringify({
450
+ query,
451
+ variables
452
+ });
453
+ const headers = _objectSpread({
454
+ 'Content-Type': 'application/json'
455
+ }, this.getAuthHeader());
456
+ try {
457
+ const response = await fetch(graphqlUrl, {
458
+ method: 'POST',
459
+ headers,
460
+ body
461
+ });
462
+ if (!response.ok) {
463
+ throw new Error(`HTTP error! status: ${response.status}`);
464
+ }
465
+ return await response.json();
466
+ } catch (error) {
467
+ this.logger.debug('fetchFromSymphonyViaGQL. ', 'Error fetching data: ', error);
468
+ return null;
469
+ }
470
+ }
471
+ static async provider([loggerMain, graphql, express, workspace, scope, globalConfig, cli, ui], config, [onSuccessLoginSlot]) {
472
+ const logger = loggerMain.createLogger(_cloud2().CloudAspect.id);
473
+ const cloudMain = new CloudMain(config, logger, express, workspace, scope, globalConfig, onSuccessLoginSlot);
474
+ const loginCmd = new (_login().LoginCmd)(cloudMain);
475
+ const logoutCmd = new (_logout().LogoutCmd)(cloudMain);
476
+ const whoamiCmd = new (_whoami().WhoamiCmd)(cloudMain);
477
+ cli.register(loginCmd, logoutCmd, whoamiCmd);
478
+ graphql.register((0, _cloud().cloudSchema)(cloudMain));
479
+ if (workspace) {
480
+ ui.registerOnStart(async () => {
481
+ await cloudMain.setupAuthListener();
482
+ return undefined;
483
+ });
484
+ }
485
+ return cloudMain;
64
486
  }
65
487
  }
66
488
  exports.CloudMain = CloudMain;
67
- _defineProperty(CloudMain, "slots", []);
68
- _defineProperty(CloudMain, "dependencies", []);
489
+ _class = CloudMain;
490
+ _defineProperty(CloudMain, "ERROR_RESPONSE", 500);
491
+ _defineProperty(CloudMain, "DEFAULT_PORT", 8888);
492
+ _defineProperty(CloudMain, "REDIRECT", 302);
493
+ _defineProperty(CloudMain, "GRAPHQL_ENDPOINT", '/graphql');
494
+ _defineProperty(CloudMain, "GET_SCOPES", `
495
+ query GET_SCOPES($ids: [String]!) {
496
+ getScopes(ids: $ids) {
497
+ id
498
+ scopeStyle {
499
+ icon
500
+ backgroundIconColor
501
+ stripColor
502
+ }
503
+ }
504
+ }
505
+ `);
506
+ _defineProperty(CloudMain, "slots", [_harmony().Slot.withType()]);
507
+ _defineProperty(CloudMain, "dependencies", [_logger().LoggerAspect, _graphql().default, _express().ExpressAspect, _workspace().default, _scope().default, _globalConfig().default, _cli().default, _ui().default]);
69
508
  _defineProperty(CloudMain, "runtime", _cli().MainRuntime);
70
509
  _defineProperty(CloudMain, "defaultConfig", {
71
510
  cloudDomain: (0, _constants().getCloudDomain)(),
@@ -76,8 +515,9 @@ _defineProperty(CloudMain, "defaultConfig", {
76
515
  analyticsDomain: _constants().DEFAULT_ANALYTICS_DOMAIN,
77
516
  registryUrl: _constants().DEFAULT_REGISTRY_URL,
78
517
  cloudExporterUrl: _constants().CENTRAL_BIT_HUB_URL,
79
- cloudHubName: _constants().CENTRAL_BIT_HUB_NAME
518
+ cloudHubName: _constants().CENTRAL_BIT_HUB_NAME,
519
+ loginPort: _class.DEFAULT_PORT
80
520
  });
81
- _cloud().CloudAspect.addRuntime(CloudMain);
521
+ _cloud2().CloudAspect.addRuntime(CloudMain);
82
522
 
83
523
  //# sourceMappingURL=cloud.main.runtime.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_cli","data","require","_constants","_cloud","_defineProperty","obj","key","value","_toPropertyKey","Object","defineProperty","enumerable","configurable","writable","t","i","_toPrimitive","String","r","e","Symbol","toPrimitive","call","TypeError","Number","CloudMain","constructor","config","getCloudDomain","cloudDomain","getCloudHubDomain","cloudHubDomain","getCloudApi","cloudApi","getCloudGraphQL","cloudGraphQL","getLoginDomain","loginDomain","getAnalyticsDomain","analyticsDomain","getRegistryUrl","registryUrl","getCloudExporterUrl","cloudExporterUrl","getHubName","cloudHubName","provider","_deps","exports","MainRuntime","DEFAULT_HUB_DOMAIN","getSymphonyUrl","SYMPHONY_GRAPHQL","getLoginUrl","DEFAULT_ANALYTICS_DOMAIN","DEFAULT_REGISTRY_URL","CENTRAL_BIT_HUB_URL","CENTRAL_BIT_HUB_NAME","CloudAspect","addRuntime"],"sources":["cloud.main.runtime.ts"],"sourcesContent":["import { MainRuntime } from '@teambit/cli';\nimport {\n getCloudDomain,\n DEFAULT_HUB_DOMAIN,\n getSymphonyUrl,\n SYMPHONY_GRAPHQL,\n getLoginUrl,\n DEFAULT_ANALYTICS_DOMAIN,\n DEFAULT_REGISTRY_URL,\n CENTRAL_BIT_HUB_URL,\n CENTRAL_BIT_HUB_NAME,\n} from '@teambit/legacy/dist/constants';\n\nimport { CloudAspect } from './cloud.aspect';\n\nexport interface CloudWorkspaceConfig {\n cloudDomain: string;\n cloudHubDomain: string;\n cloudApi: string;\n cloudGraphQL: string;\n loginDomain: string;\n analyticsDomain: string;\n registryUrl: string;\n cloudExporterUrl: string;\n cloudHubName: string;\n}\n\nexport class CloudMain {\n constructor(private config: CloudWorkspaceConfig) {}\n\n getCloudDomain(): string {\n return this.config.cloudDomain;\n }\n\n getCloudHubDomain(): string {\n return this.config.cloudHubDomain;\n }\n\n getCloudApi(): string {\n return this.config.cloudApi;\n }\n\n getCloudGraphQL(): string {\n return this.config.cloudGraphQL;\n }\n getLoginDomain(): string {\n return this.config.loginDomain;\n }\n\n getAnalyticsDomain(): string {\n return this.config.analyticsDomain;\n }\n\n getRegistryUrl(): string {\n return this.config.registryUrl;\n }\n\n getCloudExporterUrl(): string {\n return this.config.cloudExporterUrl;\n }\n\n getHubName(): string {\n return this.config.cloudHubName;\n }\n\n static slots = [];\n static dependencies = [];\n static runtime = MainRuntime;\n static defaultConfig: CloudWorkspaceConfig = {\n cloudDomain: getCloudDomain(),\n cloudHubDomain: DEFAULT_HUB_DOMAIN,\n cloudApi: getSymphonyUrl(),\n cloudGraphQL: SYMPHONY_GRAPHQL,\n loginDomain: getLoginUrl(),\n analyticsDomain: DEFAULT_ANALYTICS_DOMAIN,\n registryUrl: DEFAULT_REGISTRY_URL,\n cloudExporterUrl: CENTRAL_BIT_HUB_URL,\n cloudHubName: CENTRAL_BIT_HUB_NAME,\n };\n static async provider(_deps, config: CloudWorkspaceConfig) {\n return new CloudMain(config);\n }\n}\n\nCloudAspect.addRuntime(CloudMain);\n"],"mappings":";;;;;;AAAA,SAAAA,KAAA;EAAA,MAAAC,IAAA,GAAAC,OAAA;EAAAF,IAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAE,WAAA;EAAA,MAAAF,IAAA,GAAAC,OAAA;EAAAC,UAAA,YAAAA,CAAA;IAAA,OAAAF,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAYA,SAAAG,OAAA;EAAA,MAAAH,IAAA,GAAAC,OAAA;EAAAE,MAAA,YAAAA,CAAA;IAAA,OAAAH,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAA6C,SAAAI,gBAAAC,GAAA,EAAAC,GAAA,EAAAC,KAAA,IAAAD,GAAA,GAAAE,cAAA,CAAAF,GAAA,OAAAA,GAAA,IAAAD,GAAA,IAAAI,MAAA,CAAAC,cAAA,CAAAL,GAAA,EAAAC,GAAA,IAAAC,KAAA,EAAAA,KAAA,EAAAI,UAAA,QAAAC,YAAA,QAAAC,QAAA,oBAAAR,GAAA,CAAAC,GAAA,IAAAC,KAAA,WAAAF,GAAA;AAAA,SAAAG,eAAAM,CAAA,QAAAC,CAAA,GAAAC,YAAA,CAAAF,CAAA,uCAAAC,CAAA,GAAAA,CAAA,GAAAE,MAAA,CAAAF,CAAA;AAAA,SAAAC,aAAAF,CAAA,EAAAI,CAAA,2BAAAJ,CAAA,KAAAA,CAAA,SAAAA,CAAA,MAAAK,CAAA,GAAAL,CAAA,CAAAM,MAAA,CAAAC,WAAA,kBAAAF,CAAA,QAAAJ,CAAA,GAAAI,CAAA,CAAAG,IAAA,CAAAR,CAAA,EAAAI,CAAA,uCAAAH,CAAA,SAAAA,CAAA,YAAAQ,SAAA,yEAAAL,CAAA,GAAAD,MAAA,GAAAO,MAAA,EAAAV,CAAA;AActC,MAAMW,SAAS,CAAC;EACrBC,WAAWA,CAASC,MAA4B,EAAE;IAAA,KAA9BA,MAA4B,GAA5BA,MAA4B;EAAG;EAEnDC,cAAcA,CAAA,EAAW;IACvB,OAAO,IAAI,CAACD,MAAM,CAACE,WAAW;EAChC;EAEAC,iBAAiBA,CAAA,EAAW;IAC1B,OAAO,IAAI,CAACH,MAAM,CAACI,cAAc;EACnC;EAEAC,WAAWA,CAAA,EAAW;IACpB,OAAO,IAAI,CAACL,MAAM,CAACM,QAAQ;EAC7B;EAEAC,eAAeA,CAAA,EAAW;IACxB,OAAO,IAAI,CAACP,MAAM,CAACQ,YAAY;EACjC;EACAC,cAAcA,CAAA,EAAW;IACvB,OAAO,IAAI,CAACT,MAAM,CAACU,WAAW;EAChC;EAEAC,kBAAkBA,CAAA,EAAW;IAC3B,OAAO,IAAI,CAACX,MAAM,CAACY,eAAe;EACpC;EAEAC,cAAcA,CAAA,EAAW;IACvB,OAAO,IAAI,CAACb,MAAM,CAACc,WAAW;EAChC;EAEAC,mBAAmBA,CAAA,EAAW;IAC5B,OAAO,IAAI,CAACf,MAAM,CAACgB,gBAAgB;EACrC;EAEAC,UAAUA,CAAA,EAAW;IACnB,OAAO,IAAI,CAACjB,MAAM,CAACkB,YAAY;EACjC;EAgBA,aAAaC,QAAQA,CAACC,KAAK,EAAEpB,MAA4B,EAAE;IACzD,OAAO,IAAIF,SAAS,CAACE,MAAM,CAAC;EAC9B;AACF;AAACqB,OAAA,CAAAvB,SAAA,GAAAA,SAAA;AAAArB,eAAA,CAvDYqB,SAAS,WAsCL,EAAE;AAAArB,eAAA,CAtCNqB,SAAS,kBAuCE,EAAE;AAAArB,eAAA,CAvCbqB,SAAS,aAwCHwB,kBAAW;AAAA7C,eAAA,CAxCjBqB,SAAS,mBAyCyB;EAC3CI,WAAW,EAAE,IAAAD,2BAAc,EAAC,CAAC;EAC7BG,cAAc,EAAEmB,+BAAkB;EAClCjB,QAAQ,EAAE,IAAAkB,2BAAc,EAAC,CAAC;EAC1BhB,YAAY,EAAEiB,6BAAgB;EAC9Bf,WAAW,EAAE,IAAAgB,wBAAW,EAAC,CAAC;EAC1Bd,eAAe,EAAEe,qCAAwB;EACzCb,WAAW,EAAEc,iCAAoB;EACjCZ,gBAAgB,EAAEa,gCAAmB;EACrCX,YAAY,EAAEY;AAChB,CAAC;AAMHC,oBAAW,CAACC,UAAU,CAAClC,SAAS,CAAC"}
1
+ {"version":3,"names":["_harmony","data","require","_cli","_interopRequireWildcard","_uuid","_chalk","_interopRequireDefault","_os","_open","_scopes","_scopes2","_logger","_constants","_scope","_globalFlags","_graphql","_workspace","_express","_globalConfig","_ui","_cloud","_cloud2","_login","_logout","_whoami","_class","obj","__esModule","default","_getRequireWildcardCache","e","WeakMap","r","t","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","ownKeys","keys","getOwnPropertySymbols","o","filter","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","key","value","_toPropertyKey","configurable","writable","_toPrimitive","String","Symbol","toPrimitive","TypeError","Number","CloudMain","constructor","config","logger","express","workspace","scope","globalConfig","onSuccessLoginSlot","Map","setupAuthListener","port","portFromParams","clientId","v4","Promise","resolve","reject","getLoginPort","existingAuthListener","authListenerByPort","debug","expressApp","createApp","authServer","listen","existing","server","on","err","code","warn","then","catch","error","req","res","query","clientIdFromReq","redirectUri","username","usernameFromReq","undefined","token","Array","isArray","status","send","setSync","CFG_USER_TOKEN_KEY","CFG_USER_NAME_KEY","onLoggedInFns","values","fn","REDIRECT_URL","redirect","ERROR_RESPONSE","registerOnSuccessLogin","onSuccessLoginFn","register","getCloudDomain","cloudDomain","getCloudHubDomain","cloudHubDomain","getCloudApi","cloudApi","getCloudGraphQL","cloudGraphQL","getLoginDomain","loginDomain","getAnalyticsDomain","analyticsDomain","getRegistryUrl","registryUrl","getCloudExporterUrl","cloudExporterUrl","getHubName","cloudHubName","loginPort","DEFAULT_PORT","isLoggedIn","Boolean","getAuthToken","invalidateCache","processToken","globalFlags","getSync","getAuthHeader","Authorization","getCurrentUser","route","url","opts","method","headers","fetch","response","json","payload","getUsername","getLoginUrl","redirectUrl","machineName","loginUrl","authListenerForPort","os","hostname","process","platform","authListener","encodeURI","logout","delSync","whoami","currentUser","login","suppressBrowserLaunch","isAlreadyLoggedIn","promptLogin","loggedInParams","Error","console","log","chalk","yellow","open","getCloudScopes","scopes","remotes","_legacyRemotes","filteredScopesToFetch","ScopeID","isValid","isHub","queryResponse","fetchFromSymphonyViaGQL","GET_SCOPES","ids","scopesFromQuery","getScopes","map","scopeDescriptorObj","id","fromString","ScopeDescriptor","fromObject","variables","graphqlUrl","GRAPHQL_ENDPOINT","body","JSON","stringify","ok","provider","loggerMain","graphql","cli","ui","createLogger","CloudAspect","cloudMain","loginCmd","LoginCmd","logoutCmd","LogoutCmd","whoamiCmd","WhoamiCmd","cloudSchema","registerOnStart","exports","Slot","withType","LoggerAspect","GraphqlAspect","ExpressAspect","WorkspaceAspect","ScopeAspect","GlobalConfigAspect","CLIAspect","UIAspect","MainRuntime","DEFAULT_HUB_DOMAIN","getSymphonyUrl","SYMPHONY_GRAPHQL","DEFAULT_ANALYTICS_DOMAIN","DEFAULT_REGISTRY_URL","CENTRAL_BIT_HUB_URL","CENTRAL_BIT_HUB_NAME","addRuntime"],"sources":["cloud.main.runtime.ts"],"sourcesContent":["import { Slot, SlotRegistry } from '@teambit/harmony';\nimport CLIAspect, { CLIMain, MainRuntime } from '@teambit/cli';\nimport { v4 } from 'uuid';\nimport chalk from 'chalk';\nimport os from 'os';\nimport open from 'open';\nimport * as http from 'http';\nimport { Express } from 'express';\nimport { GetScopesGQLResponse } from '@teambit/cloud.models.cloud-scope';\nimport { CloudUser, CloudUserAPIResponse } from '@teambit/cloud.models.cloud-user';\nimport { ScopeDescriptor } from '@teambit/scopes.scope-descriptor';\nimport { ScopeID } from '@teambit/scopes.scope-id';\nimport { Logger, LoggerAspect, LoggerMain } from '@teambit/logger';\nimport {\n getCloudDomain,\n DEFAULT_HUB_DOMAIN,\n getSymphonyUrl,\n SYMPHONY_GRAPHQL,\n getLoginUrl,\n DEFAULT_ANALYTICS_DOMAIN,\n DEFAULT_REGISTRY_URL,\n CENTRAL_BIT_HUB_URL,\n CENTRAL_BIT_HUB_NAME,\n CFG_USER_TOKEN_KEY,\n CFG_USER_NAME_KEY,\n} from '@teambit/legacy/dist/constants';\nimport ScopeAspect, { ScopeMain } from '@teambit/scope';\nimport globalFlags from '@teambit/legacy/dist/cli/global-flags';\nimport GraphqlAspect, { GraphqlMain } from '@teambit/graphql';\nimport WorkspaceAspect, { Workspace } from '@teambit/workspace';\nimport { ExpressAspect, ExpressMain } from '@teambit/express';\nimport GlobalConfigAspect, { GlobalConfigMain } from '@teambit/global-config';\nimport UIAspect, { UiMain } from '@teambit/ui';\nimport { cloudSchema } from './cloud.graphql';\nimport { CloudAspect } from './cloud.aspect';\nimport { LoginCmd } from './login.cmd';\nimport { LogoutCmd } from './logout.cmd';\nimport { WhoamiCmd } from './whoami.cmd';\n\nexport interface CloudWorkspaceConfig {\n cloudDomain: string;\n cloudHubDomain: string;\n cloudApi: string;\n cloudGraphQL: string;\n loginDomain: string;\n analyticsDomain: string;\n registryUrl: string;\n cloudExporterUrl: string;\n cloudHubName: string;\n loginPort?: number;\n}\n\ntype CloudAuthListener = {\n port: number;\n server?: http.Server;\n username?: string | null;\n clientId?: string;\n expressApp?: Express | null;\n};\n\nexport type OnSuccessLogin = ({ username, token }: { username?: string; token?: string }) => void;\nexport type OnSuccessLoginSlot = SlotRegistry<OnSuccessLogin>;\nexport class CloudMain {\n static ERROR_RESPONSE = 500;\n static DEFAULT_PORT = 8888;\n static REDIRECT = 302;\n static GRAPHQL_ENDPOINT = '/graphql';\n private authListenerByPort: Map<number, CloudAuthListener> = new Map();\n private REDIRECT_URL?: string;\n\n constructor(\n private config: CloudWorkspaceConfig,\n public logger: Logger,\n public express: ExpressMain,\n public workspace: Workspace,\n public scope: ScopeMain,\n public globalConfig: GlobalConfigMain,\n public onSuccessLoginSlot: OnSuccessLoginSlot\n ) {}\n\n setupAuthListener({\n port: portFromParams,\n clientId = v4(),\n }: {\n port?: number;\n clientId?: string;\n } = {}): Promise<CloudAuthListener | null> {\n return new Promise((resolve, reject) => {\n const port = portFromParams || this.getLoginPort();\n const existingAuthListener = this.authListenerByPort.get(port);\n\n if (existingAuthListener) {\n this.logger.debug(`auth server is already running on port ${port}`);\n resolve(existingAuthListener);\n return;\n }\n\n const expressApp = this.express.createApp();\n\n this.authListenerByPort.set(port, {\n port,\n clientId,\n });\n\n const authServer = expressApp\n .listen(port, () => {\n this.logger.debug(`cloud express server started on port ${port}`);\n const existing = this.authListenerByPort.get(port) ?? {};\n this.authListenerByPort.set(port, {\n port,\n clientId,\n ...existing,\n server: authServer,\n });\n resolve({\n port,\n server: authServer,\n clientId,\n });\n })\n .on('error', (err) => {\n // @ts-ignore\n const { code } = err;\n if (code === 'EADDRINUSE') {\n // set up a new auth listener with new port\n this.logger.warn(`port: ${port} already in use for cloud auth listener, trying port ${port + 1}`);\n // eslint-disable-next-line promise/no-promise-in-callback\n this.setupAuthListener({\n port: port + 1,\n })\n .then(resolve)\n .catch(reject);\n return;\n }\n this.logger.error(`cloud express server failed to start on port ${port}`, err);\n reject(err);\n });\n\n expressApp.get('/', (req, res) => {\n this.logger.debug('cloud.authListener', 'received request', req.query);\n try {\n const { clientId: clientIdFromReq, redirectUri, username: usernameFromReq } = req.query;\n const username = typeof usernameFromReq === 'string' ? usernameFromReq : undefined;\n let { token } = req.query;\n if (Array.isArray(token)) {\n token = token[0];\n }\n if (typeof token !== 'string') {\n res.status(400).send('Invalid token format');\n return res;\n }\n this.globalConfig.setSync(CFG_USER_TOKEN_KEY, token);\n if (username) this.globalConfig.setSync(CFG_USER_NAME_KEY, username);\n\n const onLoggedInFns = this.onSuccessLoginSlot.values();\n onLoggedInFns.forEach((fn) => fn({ username, token: token as string }));\n\n const existing = this.authListenerByPort.get(port) ?? {};\n this.authListenerByPort.set(port, {\n port,\n server: authServer,\n clientId: clientIdFromReq as string,\n ...existing,\n username,\n });\n if (this.REDIRECT_URL) return res.redirect(this.REDIRECT_URL);\n if (typeof redirectUri === 'string' && redirectUri) return res.redirect(redirectUri);\n return res.status(200).send('Login successful');\n } catch (err) {\n this.logger.error(`Error on login: ${err}`);\n res.status(CloudMain.ERROR_RESPONSE).send('Login failed');\n reject(err);\n return res;\n }\n });\n });\n }\n\n registerOnSuccessLogin(onSuccessLoginFn: OnSuccessLogin) {\n this.onSuccessLoginSlot.register(onSuccessLoginFn);\n return this;\n }\n\n getCloudDomain(): string {\n return this.config.cloudDomain;\n }\n\n getCloudHubDomain(): string {\n return this.config.cloudHubDomain;\n }\n\n getCloudApi(): string {\n return this.config.cloudApi;\n }\n\n getCloudGraphQL(): string {\n return this.config.cloudGraphQL;\n }\n getLoginDomain(): string {\n return this.config.loginDomain;\n }\n\n getAnalyticsDomain(): string {\n return this.config.analyticsDomain;\n }\n\n getRegistryUrl(): string {\n return this.config.registryUrl;\n }\n\n getCloudExporterUrl(): string {\n return this.config.cloudExporterUrl;\n }\n\n getHubName(): string {\n return this.config.cloudHubName;\n }\n\n getLoginPort(): number {\n return this.config.loginPort || CloudMain.DEFAULT_PORT;\n }\n\n isLoggedIn(): boolean {\n return Boolean(this.getAuthToken());\n }\n\n getAuthToken() {\n this.globalConfig.invalidateCache();\n const processToken = globalFlags.token;\n const token = processToken || this.globalConfig.getSync(CFG_USER_TOKEN_KEY);\n if (!token) return null;\n\n return token;\n }\n\n getAuthHeader() {\n return {\n Authorization: `Bearer ${this.getAuthToken()}`,\n };\n }\n\n async getCurrentUser(): Promise<CloudUser | null> {\n const isLoggedIn = this.isLoggedIn();\n if (!isLoggedIn) {\n return null;\n }\n const route = 'user/user';\n this.logger.debug(`getCurrentUser, url: ${this.getCloudApi()}/${route}`);\n const url = `https://${this.getCloudApi()}/${route}`;\n const opts = {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json',\n ...this.getAuthHeader(),\n },\n };\n\n return fetch(url, opts)\n .then(async (res) => {\n if (res.status === 401) {\n return null;\n }\n const response: CloudUserAPIResponse = await res.json();\n return { ...(response.payload || {}) };\n })\n .catch((err) => {\n this.logger.error(`failed to get current user, err: ${err}`);\n return null;\n });\n }\n\n getUsername(): string | undefined {\n return this.globalConfig.getSync(CFG_USER_NAME_KEY);\n }\n\n async getLoginUrl({\n redirectUrl,\n machineName,\n cloudDomain,\n port: portFromParams,\n }: { redirectUrl?: string; machineName?: string; cloudDomain?: string; port?: string } = {}): Promise<string | null> {\n const loginUrl = cloudDomain || this.getLoginDomain();\n const port = Number(portFromParams) || this.getLoginPort();\n if (redirectUrl) {\n this.REDIRECT_URL = redirectUrl;\n }\n const authListenerForPort = this.authListenerByPort.get(port);\n if (authListenerForPort) {\n return `${loginUrl}?port=${port}&clientId=${authListenerForPort.clientId}&responseType=token&deviceName=${\n machineName || os.hostname()\n }&os=${process.platform}`;\n }\n const authListener = await this.setupAuthListener({ port });\n\n if (!authListener) return null;\n\n return encodeURI(\n `${loginUrl}?port=${port}&clientId=${authListener?.clientId}&responseType=token&deviceName=${\n machineName || os.hostname()\n }&os=${process.platform}`\n );\n }\n\n logout() {\n this.globalConfig.delSync(CFG_USER_TOKEN_KEY);\n this.globalConfig.delSync(CFG_USER_NAME_KEY);\n }\n\n async whoami(): Promise<string | undefined> {\n const currentUser = await this.getCurrentUser();\n if (!currentUser?.username) {\n return undefined;\n }\n return currentUser.username;\n }\n\n async login(\n port?: string,\n suppressBrowserLaunch?: boolean,\n machineName?: string,\n cloudDomain?: string,\n redirectUrl?: string\n ): Promise<{\n isAlreadyLoggedIn?: boolean;\n username?: string;\n token?: string;\n } | null> {\n return new Promise((resolve, reject) => {\n if (this.isLoggedIn()) {\n resolve({\n isAlreadyLoggedIn: true,\n username: this.globalConfig.getSync(CFG_USER_NAME_KEY),\n token: this.globalConfig.getSync(CFG_USER_TOKEN_KEY),\n });\n return;\n }\n\n const promptLogin = async () => {\n this.REDIRECT_URL = redirectUrl;\n this.registerOnSuccessLogin((loggedInParams) =>\n resolve({\n username: loggedInParams.username,\n token: loggedInParams.token,\n })\n );\n\n const loginUrl = await this.getLoginUrl({\n machineName,\n cloudDomain,\n port,\n });\n if (!loginUrl) {\n reject(new Error('Failed to get login url'));\n return;\n }\n if (!suppressBrowserLaunch) {\n console.log(chalk.yellow(`Your browser has been opened to visit:\\n${loginUrl}`)); // eslint-disable-line no-console\n open(loginUrl).catch((err) => {\n this.logger.error(`failed to open browser on login, err: ${err}`);\n reject(err);\n });\n } else {\n console.log(chalk.yellow(`Go to the following link in your browser::\\n${loginUrl}`)); // eslint-disable-line no-console\n }\n };\n try {\n this.setupAuthListener({\n port: Number(port),\n })\n .then(promptLogin)\n .catch((e) => reject(e));\n } catch (err) {\n reject(err);\n }\n });\n }\n\n static GET_SCOPES = `\n query GET_SCOPES($ids: [String]!) {\n getScopes(ids: $ids) {\n id\n scopeStyle {\n icon\n backgroundIconColor\n stripColor\n }\n }\n }\n `;\n\n async getCloudScopes(scopes: string[]): Promise<ScopeDescriptor[]> {\n const remotes = await this.scope._legacyRemotes();\n const filteredScopesToFetch = scopes.filter((scope) => {\n return ScopeID.isValid(scope) && remotes.isHub(scope);\n });\n const queryResponse = await this.fetchFromSymphonyViaGQL<GetScopesGQLResponse>(CloudMain.GET_SCOPES, {\n ids: filteredScopesToFetch,\n });\n const scopesFromQuery = queryResponse?.data?.getScopes;\n if (!scopesFromQuery) return [];\n return scopesFromQuery.map((scope) => {\n const scopeDescriptorObj = {\n ...scope,\n id: ScopeID.fromString(scope.id),\n };\n return ScopeDescriptor.fromObject(scopeDescriptorObj);\n });\n }\n\n async fetchFromSymphonyViaGQL<T>(query: string, variables?: Record<string, any>): Promise<T | null> {\n if (!this.isLoggedIn()) return null;\n const graphqlUrl = `https://${this.getCloudApi()}${CloudMain.GRAPHQL_ENDPOINT}`;\n const body = JSON.stringify({\n query,\n variables,\n });\n const headers = {\n 'Content-Type': 'application/json',\n ...this.getAuthHeader(),\n };\n try {\n const response = await fetch(graphqlUrl, {\n method: 'POST',\n headers,\n body,\n });\n\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n return await response.json();\n } catch (error) {\n this.logger.debug('fetchFromSymphonyViaGQL. ', 'Error fetching data: ', error);\n return null;\n }\n }\n\n static slots = [Slot.withType<OnSuccessLogin>()];\n static dependencies = [\n LoggerAspect,\n GraphqlAspect,\n ExpressAspect,\n WorkspaceAspect,\n ScopeAspect,\n GlobalConfigAspect,\n CLIAspect,\n UIAspect,\n ];\n static runtime = MainRuntime;\n static defaultConfig: CloudWorkspaceConfig = {\n cloudDomain: getCloudDomain(),\n cloudHubDomain: DEFAULT_HUB_DOMAIN,\n cloudApi: getSymphonyUrl(),\n cloudGraphQL: SYMPHONY_GRAPHQL,\n loginDomain: getLoginUrl(),\n analyticsDomain: DEFAULT_ANALYTICS_DOMAIN,\n registryUrl: DEFAULT_REGISTRY_URL,\n cloudExporterUrl: CENTRAL_BIT_HUB_URL,\n cloudHubName: CENTRAL_BIT_HUB_NAME,\n loginPort: CloudMain.DEFAULT_PORT,\n };\n static async provider(\n [loggerMain, graphql, express, workspace, scope, globalConfig, cli, ui]: [\n LoggerMain,\n GraphqlMain,\n ExpressMain,\n Workspace,\n ScopeMain,\n GlobalConfigMain,\n CLIMain,\n UiMain\n ],\n config: CloudWorkspaceConfig,\n [onSuccessLoginSlot]: [OnSuccessLoginSlot]\n ) {\n const logger = loggerMain.createLogger(CloudAspect.id);\n const cloudMain = new CloudMain(config, logger, express, workspace, scope, globalConfig, onSuccessLoginSlot);\n const loginCmd = new LoginCmd(cloudMain);\n const logoutCmd = new LogoutCmd(cloudMain);\n const whoamiCmd = new WhoamiCmd(cloudMain);\n cli.register(loginCmd, logoutCmd, whoamiCmd);\n graphql.register(cloudSchema(cloudMain));\n if (workspace) {\n ui.registerOnStart(async () => {\n await cloudMain.setupAuthListener();\n return undefined;\n });\n }\n return cloudMain;\n }\n}\n\nCloudAspect.addRuntime(CloudMain);\n"],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import { UserBarItem, UserBarItemSlot, UserBarSection, UserBarSectionSlot } from '@teambit/cloud.ui.user-bar';
2
+ import { WorkspaceUI } from '@teambit/workspace';
3
+ export declare class CloudUI {
4
+ private userBarSectionSlot;
5
+ private userBarItemSlot;
6
+ constructor(userBarSectionSlot: UserBarSectionSlot, userBarItemSlot: UserBarItemSlot);
7
+ /**
8
+ * register a new user bar item.
9
+ */
10
+ registerUserBarItem(userBarItem: UserBarItem[]): this;
11
+ /**
12
+ * register a new user bar section
13
+ */
14
+ registerUserBarSection(sections: UserBarSection[]): this;
15
+ /**
16
+ * list user bar items.
17
+ */
18
+ listUserBarItems(): UserBarItem[];
19
+ /**
20
+ * list all user bar sections.
21
+ */
22
+ listUserBarSections(): UserBarSection[];
23
+ static runtime: import("@teambit/harmony").RuntimeDefinition;
24
+ static dependencies: import("@teambit/harmony").Aspect[];
25
+ static slots: (((registerFn: () => string) => import("@teambit/harmony").SlotRegistry<UserBarItem[]>) | ((registerFn: () => string) => import("@teambit/harmony").SlotRegistry<UserBarSection[]>))[];
26
+ static provider([workspace]: [WorkspaceUI], _: any, [userBarItemSlot, userBarSectionSlot]: [UserBarItemSlot, UserBarSectionSlot]): Promise<CloudUI>;
27
+ }
28
+ export default CloudUI;