@teambit/cloud 0.0.440 → 0.0.442
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/artifacts/__bit_junit.xml +1 -1
- package/artifacts/schema.json +2005 -892
- package/dist/cloud.main.runtime.d.ts +38 -12
- package/dist/cloud.main.runtime.js +94 -17
- package/dist/cloud.main.runtime.js.map +1 -1
- package/dist/login.cmd.d.ts +4 -1
- package/dist/login.cmd.js +50 -10
- package/dist/login.cmd.js.map +1 -1
- package/dist/npmrc.cmd.d.ts +36 -0
- package/dist/npmrc.cmd.js +110 -0
- package/dist/npmrc.cmd.js.map +1 -0
- package/package.json +9 -8
- /package/dist/{preview-1707707812660.js → preview-1707880563763.js} +0 -0
|
@@ -38,13 +38,17 @@ type CloudOrganization = {
|
|
|
38
38
|
export type OnSuccessLogin = ({ username, token, npmrcUpdateResult, }: {
|
|
39
39
|
username?: string;
|
|
40
40
|
token?: string;
|
|
41
|
-
npmrcUpdateResult?:
|
|
42
|
-
success?: boolean;
|
|
43
|
-
error?: Error;
|
|
44
|
-
configUpdates?: string;
|
|
45
|
-
};
|
|
41
|
+
npmrcUpdateResult?: NpmConfigUpdateResult;
|
|
46
42
|
}) => void;
|
|
47
43
|
export type OnSuccessLoginSlot = SlotRegistry<OnSuccessLogin>;
|
|
44
|
+
export type NpmConfigUpdateResult = {
|
|
45
|
+
conflicts?: {
|
|
46
|
+
original: string;
|
|
47
|
+
modifications: string;
|
|
48
|
+
}[];
|
|
49
|
+
configUpdates?: string;
|
|
50
|
+
error?: Error;
|
|
51
|
+
};
|
|
48
52
|
export declare class CloudMain {
|
|
49
53
|
private config;
|
|
50
54
|
logger: Logger;
|
|
@@ -60,10 +64,36 @@ export declare class CloudMain {
|
|
|
60
64
|
private authListenerByPort;
|
|
61
65
|
private REDIRECT_URL?;
|
|
62
66
|
constructor(config: CloudWorkspaceConfig, logger: Logger, express: ExpressMain, workspace: Workspace, scope: ScopeMain, globalConfig: GlobalConfigMain, onSuccessLoginSlot: OnSuccessLoginSlot);
|
|
63
|
-
|
|
67
|
+
getNpmConfig(): Record<string, string>;
|
|
68
|
+
generateNpmrc({ dryRun, force }?: {
|
|
69
|
+
dryRun?: boolean;
|
|
70
|
+
force?: boolean;
|
|
71
|
+
}): Promise<{
|
|
72
|
+
conflicts?: {
|
|
73
|
+
original: string;
|
|
74
|
+
modifications: string;
|
|
75
|
+
}[];
|
|
76
|
+
configUpdates?: string;
|
|
77
|
+
}>;
|
|
78
|
+
detectConfigConflicts({ newConfigs, registryDomain, }: {
|
|
79
|
+
newConfigs: string;
|
|
80
|
+
registryDomain: string;
|
|
81
|
+
}): {
|
|
82
|
+
original: string;
|
|
83
|
+
modifications: string;
|
|
84
|
+
}[];
|
|
85
|
+
updateNpmConfig({ authToken, username, dryRun, force, }: {
|
|
64
86
|
authToken: string;
|
|
65
87
|
username: string;
|
|
66
|
-
|
|
88
|
+
dryRun?: boolean;
|
|
89
|
+
force?: boolean;
|
|
90
|
+
}): Promise<{
|
|
91
|
+
conflicts?: {
|
|
92
|
+
original: string;
|
|
93
|
+
modifications: string;
|
|
94
|
+
}[];
|
|
95
|
+
configUpdates?: string;
|
|
96
|
+
}>;
|
|
67
97
|
setupAuthListener({ port: portFromParams, clientId, }?: {
|
|
68
98
|
port?: number;
|
|
69
99
|
clientId?: string;
|
|
@@ -97,11 +127,7 @@ export declare class CloudMain {
|
|
|
97
127
|
isAlreadyLoggedIn?: boolean;
|
|
98
128
|
username?: string;
|
|
99
129
|
token?: string;
|
|
100
|
-
npmrcUpdateResult?:
|
|
101
|
-
success?: boolean;
|
|
102
|
-
error?: Error;
|
|
103
|
-
configUpdates?: string;
|
|
104
|
-
};
|
|
130
|
+
npmrcUpdateResult?: NpmConfigUpdateResult;
|
|
105
131
|
} | null>;
|
|
106
132
|
static GET_SCOPES: string;
|
|
107
133
|
static GET_CURRENT_USER: string;
|
|
@@ -165,6 +165,13 @@ function _whoami() {
|
|
|
165
165
|
};
|
|
166
166
|
return data;
|
|
167
167
|
}
|
|
168
|
+
function _npmrc() {
|
|
169
|
+
const data = require("./npmrc.cmd");
|
|
170
|
+
_npmrc = function () {
|
|
171
|
+
return data;
|
|
172
|
+
};
|
|
173
|
+
return data;
|
|
174
|
+
}
|
|
168
175
|
var _CloudMain;
|
|
169
176
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
170
177
|
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); }
|
|
@@ -186,21 +193,92 @@ class CloudMain {
|
|
|
186
193
|
_defineProperty(this, "authListenerByPort", new Map());
|
|
187
194
|
_defineProperty(this, "REDIRECT_URL", void 0);
|
|
188
195
|
}
|
|
189
|
-
|
|
196
|
+
getNpmConfig() {
|
|
197
|
+
try {
|
|
198
|
+
const output = (0, _child_process().execSync)(`npm config list --json`, {
|
|
199
|
+
encoding: 'utf8'
|
|
200
|
+
});
|
|
201
|
+
return JSON.parse(output);
|
|
202
|
+
} catch (error) {
|
|
203
|
+
throw new Error(`failed to get npm config. error: ${error}`);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
async generateNpmrc({
|
|
207
|
+
dryRun,
|
|
208
|
+
force
|
|
209
|
+
} = {}) {
|
|
210
|
+
const authToken = this.getAuthToken();
|
|
211
|
+
const username = this.getUsername();
|
|
212
|
+
if (!authToken || !username) {
|
|
213
|
+
throw new Error('user is not logged in');
|
|
214
|
+
}
|
|
215
|
+
return this.updateNpmConfig({
|
|
216
|
+
authToken,
|
|
217
|
+
username,
|
|
218
|
+
dryRun,
|
|
219
|
+
force
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
detectConfigConflicts({
|
|
223
|
+
newConfigs,
|
|
224
|
+
registryDomain
|
|
225
|
+
}) {
|
|
226
|
+
const existingConfigs = this.getNpmConfig();
|
|
227
|
+
const conflicts = [];
|
|
228
|
+
newConfigs.split('\n').forEach(line => {
|
|
229
|
+
const [key, newValue] = line.split('=');
|
|
230
|
+
if (key && newValue) {
|
|
231
|
+
const trimmedKey = key.trim();
|
|
232
|
+
const existingValue = existingConfigs[trimmedKey];
|
|
233
|
+
const isRegistryConflict = existingValue && !existingValue.includes(registryDomain);
|
|
234
|
+
if (existingValue && isRegistryConflict) {
|
|
235
|
+
conflicts.push({
|
|
236
|
+
original: `${trimmedKey}=${existingValue}`,
|
|
237
|
+
modifications: `${trimmedKey}=${newValue.trim()}`
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
});
|
|
242
|
+
return conflicts;
|
|
243
|
+
}
|
|
244
|
+
async updateNpmConfig({
|
|
190
245
|
authToken,
|
|
191
|
-
username
|
|
246
|
+
username,
|
|
247
|
+
dryRun,
|
|
248
|
+
force
|
|
192
249
|
}) {
|
|
193
250
|
const orgs = (await this.getUserOrganizations()) ?? [];
|
|
194
251
|
const orgNames = orgs.map(org => org.name);
|
|
195
|
-
const allOrgs = [...CloudMain.PRESET_ORGS, ...orgNames, username];
|
|
196
|
-
const
|
|
197
|
-
const
|
|
198
|
-
const
|
|
199
|
-
const
|
|
200
|
-
|
|
252
|
+
const allOrgs = Array.from(new Set([...CloudMain.PRESET_ORGS, ...orgNames, username])).sort();
|
|
253
|
+
const registryUrlStr = this.getRegistryUrl();
|
|
254
|
+
const registryUrl = new URL(registryUrlStr);
|
|
255
|
+
const scopeConfig = allOrgs.map(org => `@${org}:registry="${registryUrlStr}"`).join('\n');
|
|
256
|
+
const authConfig = `//${registryUrl.host}/:_authToken="${authToken}"`;
|
|
257
|
+
const configUpdates = `${scopeConfig}\n${authConfig}`;
|
|
258
|
+
if (!force) {
|
|
259
|
+
const conflicts = this.detectConfigConflicts({
|
|
260
|
+
newConfigs: configUpdates,
|
|
261
|
+
registryDomain: this.getCloudDomain()
|
|
262
|
+
});
|
|
263
|
+
if (conflicts.length > 0) {
|
|
264
|
+
return {
|
|
265
|
+
conflicts,
|
|
266
|
+
configUpdates
|
|
267
|
+
};
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
if (dryRun) {
|
|
271
|
+
return {
|
|
272
|
+
configUpdates
|
|
273
|
+
};
|
|
274
|
+
}
|
|
275
|
+
const configToUpdate = configUpdates.replace(/\n/g, ' ');
|
|
276
|
+
(0, _child_process().execSync)(`npm config set ${configToUpdate}`, {
|
|
201
277
|
stdio: 'ignore'
|
|
202
278
|
});
|
|
203
|
-
return
|
|
279
|
+
return {
|
|
280
|
+
configUpdates
|
|
281
|
+
};
|
|
204
282
|
}
|
|
205
283
|
setupAuthListener({
|
|
206
284
|
port: portFromParams,
|
|
@@ -280,24 +358,20 @@ class CloudMain {
|
|
|
280
358
|
username
|
|
281
359
|
}));
|
|
282
360
|
const onLoggedInFns = this.onSuccessLoginSlot.values();
|
|
283
|
-
this.
|
|
361
|
+
this.updateNpmConfig({
|
|
284
362
|
authToken: token,
|
|
285
363
|
username: username
|
|
286
364
|
}).then(configUpdates => {
|
|
287
365
|
onLoggedInFns.forEach(fn => fn({
|
|
288
366
|
username,
|
|
289
367
|
token: token,
|
|
290
|
-
npmrcUpdateResult:
|
|
291
|
-
success: true,
|
|
292
|
-
configUpdates
|
|
293
|
-
}
|
|
368
|
+
npmrcUpdateResult: configUpdates
|
|
294
369
|
}));
|
|
295
370
|
}).catch(error => {
|
|
296
371
|
onLoggedInFns.forEach(fn => fn({
|
|
297
372
|
username,
|
|
298
373
|
token: token,
|
|
299
374
|
npmrcUpdateResult: {
|
|
300
|
-
success: false,
|
|
301
375
|
error: new Error(`failed to update npmrc. error ${error?.toString}`)
|
|
302
376
|
}
|
|
303
377
|
}));
|
|
@@ -507,10 +581,13 @@ class CloudMain {
|
|
|
507
581
|
static async provider([loggerMain, graphql, express, workspace, scope, globalConfig, cli, ui], config, [onSuccessLoginSlot]) {
|
|
508
582
|
const logger = loggerMain.createLogger(_cloud2().CloudAspect.id);
|
|
509
583
|
const cloudMain = new CloudMain(config, logger, express, workspace, scope, globalConfig, onSuccessLoginSlot);
|
|
510
|
-
const loginCmd = new (_login().LoginCmd)(cloudMain);
|
|
584
|
+
const loginCmd = new (_login().LoginCmd)(cloudMain, 8889);
|
|
511
585
|
const logoutCmd = new (_logout().LogoutCmd)(cloudMain);
|
|
512
586
|
const whoamiCmd = new (_whoami().WhoamiCmd)(cloudMain);
|
|
513
|
-
|
|
587
|
+
const npmrcGenerateCmd = new (_npmrc().NpmrcGenerateCmd)(cloudMain, 8889);
|
|
588
|
+
const npmrc = new (_npmrc().NpmrcCmd)();
|
|
589
|
+
npmrc.commands = [npmrcGenerateCmd];
|
|
590
|
+
cli.register(loginCmd, logoutCmd, whoamiCmd, npmrc);
|
|
514
591
|
graphql.register((0, _cloud().cloudSchema)(cloudMain));
|
|
515
592
|
if (workspace) {
|
|
516
593
|
ui.registerOnStart(async () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_harmony","data","require","_cli","_interopRequireWildcard","_uuid","_chalk","_interopRequireDefault","_os","_open","_scopes","_scopes2","_logger","_constants","_scope","_globalFlags","_graphql","_workspace","_express","_globalConfig","_child_process","_ui","_cloud","_cloud2","_login","_logout","_whoami","_CloudMain","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","updateNpmrcOnLogin","authToken","username","orgs","getUserOrganizations","orgNames","map","org","name","allOrgs","PRESET_ORGS","registryUrl","getRegistryUrl","scopeConfig","join","authConfig","URL","host","configUpdates","execSync","stdio","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","usernameFromReq","undefined","token","Array","isArray","status","send","setSync","CFG_USER_TOKEN_KEY","CFG_USER_NAME_KEY","onLoggedInFns","values","fn","npmrcUpdateResult","success","Error","toString","REDIRECT_URL","redirect","ERROR_RESPONSE","registerOnSuccessLogin","onSuccessLoginFn","register","getCloudDomain","cloudDomain","getCloudHubDomain","cloudHubDomain","getCloudApi","cloudApi","getCloudGraphQL","cloudGraphQL","getLoginDomain","loginDomain","getAnalyticsDomain","analyticsDomain","getCloudExporterUrl","cloudExporterUrl","getHubName","cloudHubName","loginPort","DEFAULT_PORT","isLoggedIn","Boolean","getAuthToken","invalidateCache","processToken","globalFlags","getSync","getAuthHeader","Authorization","getUsername","getLoginUrl","redirectUrl","machineName","loginUrl","authListenerForPort","os","hostname","process","platform","authListener","encodeURI","logout","delSync","whoami","currentUser","getCurrentUser","login","suppressBrowserLaunch","isAlreadyLoggedIn","promptLogin","loggedInParams","console","log","chalk","yellow","open","getCloudScopes","scopes","remotes","_legacyRemotes","filteredScopesToFetch","ScopeID","isValid","isHub","queryResponse","fetchFromSymphonyViaGQL","GET_SCOPES","ids","scopesFromQuery","getScopes","scopeDescriptorObj","id","fromString","ScopeDescriptor","fromObject","GET_CURRENT_USER","response","displayName","me","profileImage","image","GET_USER_ORGANIZATIONS","variables","graphqlUrl","GRAPHQL_ENDPOINT","body","JSON","stringify","headers","fetch","method","ok","json","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 { execSync } from 'child_process';\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\ntype CloudOrganization = {\n id: string;\n name: string;\n};\n\ntype CloudOrganizationAPIResponse = {\n data: {\n getUserOrganizations: CloudOrganization[];\n };\n};\n\nexport type OnSuccessLogin = ({\n username,\n token,\n npmrcUpdateResult,\n}: {\n username?: string;\n token?: string;\n npmrcUpdateResult?: {\n success?: boolean;\n error?: Error;\n configUpdates?: string;\n };\n}) => void;\nexport type OnSuccessLoginSlot = SlotRegistry<OnSuccessLogin>;\n\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 async updateNpmrcOnLogin({ authToken, username }: { authToken: string; username: string }): Promise<string> {\n const orgs = (await this.getUserOrganizations()) ?? [];\n const orgNames = orgs.map((org) => org.name);\n const allOrgs = [...CloudMain.PRESET_ORGS, ...orgNames, username];\n const registryUrl = this.getRegistryUrl();\n const scopeConfig = allOrgs.map((org) => `@${org}:registry=\"${registryUrl}\"`).join(' ');\n const authConfig = `//${new URL(registryUrl).host}/:_authToken=\"${authToken}\"`;\n const configUpdates = `${scopeConfig} ${authConfig}`;\n execSync(`npm config set ${configUpdates}`, { stdio: 'ignore' });\n return configUpdates;\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 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\n const onLoggedInFns = this.onSuccessLoginSlot.values();\n\n this.updateNpmrcOnLogin({ authToken: token as string, username: username as string })\n .then((configUpdates) => {\n onLoggedInFns.forEach((fn) =>\n fn({ username, token: token as string, npmrcUpdateResult: { success: true, configUpdates } })\n );\n })\n .catch((error) => {\n onLoggedInFns.forEach((fn) =>\n fn({\n username,\n token: token as string,\n npmrcUpdateResult: {\n success: false,\n error: new Error(`failed to update npmrc. error ${error?.toString}`),\n },\n })\n );\n });\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 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 npmrcUpdateResult?: {\n success?: boolean;\n error?: Error;\n configUpdates?: string;\n };\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 npmrcUpdateResult: loggedInParams.npmrcUpdateResult,\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 static GET_CURRENT_USER = `\n query GET_ME {\n me {\n id\n username\n image\n displayName\n }\n }\n `;\n static GET_USER_ORGANIZATIONS = `\n query GET_USER_ORGANIZATIONS {\n getUserOrganizations {\n id\n name\n } \n }\n `;\n\n static PRESET_ORGS = ['bitdev', 'teambit', 'bitdesign', 'frontend', 'backend'];\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 getCurrentUser(): Promise<CloudUser | null> {\n return this.fetchFromSymphonyViaGQL<CloudUserAPIResponse>(CloudMain.GET_CURRENT_USER).then((response) => {\n if (!response) return null;\n return {\n isLoggedIn: true,\n displayName: response.data.me.displayName,\n username: response.data.me.username,\n profileImage: response.data.me.image,\n };\n });\n }\n\n async getUserOrganizations(): Promise<CloudOrganization[] | null> {\n return this.fetchFromSymphonyViaGQL<CloudOrganizationAPIResponse>(CloudMain.GET_USER_ORGANIZATIONS).then(\n (response) => {\n if (!response) return null;\n return response.data.getUserOrganizations;\n }\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 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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"}
|
|
1
|
+
{"version":3,"names":["_harmony","data","require","_cli","_interopRequireWildcard","_uuid","_chalk","_interopRequireDefault","_os","_open","_scopes","_scopes2","_logger","_constants","_scope","_globalFlags","_graphql","_workspace","_express","_globalConfig","_child_process","_ui","_cloud","_cloud2","_login","_logout","_whoami","_npmrc","_CloudMain","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","getNpmConfig","output","execSync","encoding","JSON","parse","error","Error","generateNpmrc","dryRun","force","authToken","getAuthToken","username","getUsername","updateNpmConfig","detectConfigConflicts","newConfigs","registryDomain","existingConfigs","conflicts","split","line","newValue","trimmedKey","trim","existingValue","isRegistryConflict","includes","original","modifications","orgs","getUserOrganizations","orgNames","map","org","name","allOrgs","Array","from","Set","PRESET_ORGS","sort","registryUrlStr","getRegistryUrl","registryUrl","URL","scopeConfig","join","authConfig","host","configUpdates","getCloudDomain","configToUpdate","replace","stdio","setupAuthListener","port","portFromParams","clientId","v4","Promise","resolve","reject","getLoginPort","existingAuthListener","authListenerByPort","debug","expressApp","createApp","authServer","listen","existing","server","on","err","code","warn","then","catch","req","res","query","clientIdFromReq","redirectUri","usernameFromReq","undefined","token","isArray","status","send","setSync","CFG_USER_TOKEN_KEY","CFG_USER_NAME_KEY","onLoggedInFns","values","fn","npmrcUpdateResult","toString","REDIRECT_URL","redirect","ERROR_RESPONSE","registerOnSuccessLogin","onSuccessLoginFn","register","cloudDomain","getCloudHubDomain","cloudHubDomain","getCloudApi","cloudApi","getCloudGraphQL","cloudGraphQL","getLoginDomain","loginDomain","getAnalyticsDomain","analyticsDomain","getCloudExporterUrl","cloudExporterUrl","getHubName","cloudHubName","loginPort","DEFAULT_PORT","isLoggedIn","Boolean","invalidateCache","processToken","globalFlags","getSync","getAuthHeader","Authorization","getLoginUrl","redirectUrl","machineName","loginUrl","authListenerForPort","os","hostname","process","platform","authListener","encodeURI","logout","delSync","whoami","currentUser","getCurrentUser","login","suppressBrowserLaunch","isAlreadyLoggedIn","promptLogin","loggedInParams","console","log","chalk","yellow","open","getCloudScopes","scopes","remotes","_legacyRemotes","filteredScopesToFetch","ScopeID","isValid","isHub","queryResponse","fetchFromSymphonyViaGQL","GET_SCOPES","ids","scopesFromQuery","getScopes","scopeDescriptorObj","id","fromString","ScopeDescriptor","fromObject","GET_CURRENT_USER","response","displayName","me","profileImage","image","GET_USER_ORGANIZATIONS","variables","graphqlUrl","GRAPHQL_ENDPOINT","body","stringify","headers","fetch","method","ok","json","provider","loggerMain","graphql","cli","ui","createLogger","CloudAspect","cloudMain","loginCmd","LoginCmd","logoutCmd","LogoutCmd","whoamiCmd","WhoamiCmd","npmrcGenerateCmd","NpmrcGenerateCmd","npmrc","NpmrcCmd","commands","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 { execSync } from 'child_process';\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';\nimport { NpmrcCmd, NpmrcGenerateCmd } from './npmrc.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\ntype CloudOrganization = {\n id: string;\n name: string;\n};\n\ntype CloudOrganizationAPIResponse = {\n data: {\n getUserOrganizations: CloudOrganization[];\n };\n};\n\nexport type OnSuccessLogin = ({\n username,\n token,\n npmrcUpdateResult,\n}: {\n username?: string;\n token?: string;\n npmrcUpdateResult?: NpmConfigUpdateResult;\n}) => void;\nexport type OnSuccessLoginSlot = SlotRegistry<OnSuccessLogin>;\nexport type NpmConfigUpdateResult = {\n conflicts?: { original: string; modifications: string }[];\n configUpdates?: string;\n error?: Error;\n};\n\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 getNpmConfig(): Record<string, string> {\n try {\n const output = execSync(`npm config list --json`, { encoding: 'utf8' });\n return JSON.parse(output);\n } catch (error) {\n throw new Error(`failed to get npm config. error: ${error}`);\n }\n }\n\n async generateNpmrc({ dryRun, force }: { dryRun?: boolean; force?: boolean } = {}): Promise<{\n conflicts?: { original: string; modifications: string }[];\n configUpdates?: string;\n }> {\n const authToken = this.getAuthToken();\n const username = this.getUsername();\n if (!authToken || !username) {\n throw new Error('user is not logged in');\n }\n return this.updateNpmConfig({ authToken, username, dryRun, force });\n }\n\n detectConfigConflicts({\n newConfigs,\n registryDomain,\n }: {\n newConfigs: string;\n registryDomain: string;\n }): { original: string; modifications: string }[] {\n const existingConfigs = this.getNpmConfig();\n const conflicts: { original: string; modifications: string }[] = [];\n\n newConfigs.split('\\n').forEach((line) => {\n const [key, newValue] = line.split('=');\n if (key && newValue) {\n const trimmedKey = key.trim();\n const existingValue = existingConfigs[trimmedKey];\n const isRegistryConflict = existingValue && !existingValue.includes(registryDomain);\n\n if (existingValue && isRegistryConflict) {\n conflicts.push({\n original: `${trimmedKey}=${existingValue}`,\n modifications: `${trimmedKey}=${newValue.trim()}`,\n });\n }\n }\n });\n\n return conflicts;\n }\n\n async updateNpmConfig({\n authToken,\n username,\n dryRun,\n force,\n }: {\n authToken: string;\n username: string;\n dryRun?: boolean;\n force?: boolean;\n }): Promise<{ conflicts?: { original: string; modifications: string }[]; configUpdates?: string }> {\n const orgs = (await this.getUserOrganizations()) ?? [];\n const orgNames = orgs.map((org) => org.name);\n const allOrgs = Array.from(new Set([...CloudMain.PRESET_ORGS, ...orgNames, username])).sort();\n const registryUrlStr = this.getRegistryUrl();\n const registryUrl = new URL(registryUrlStr);\n const scopeConfig = allOrgs.map((org) => `@${org}:registry=\"${registryUrlStr}\"`).join('\\n');\n const authConfig = `//${registryUrl.host}/:_authToken=\"${authToken}\"`;\n const configUpdates = `${scopeConfig}\\n${authConfig}`;\n\n if (!force) {\n const conflicts = this.detectConfigConflicts({\n newConfigs: configUpdates,\n registryDomain: this.getCloudDomain(),\n });\n\n if (conflicts.length > 0) {\n return { conflicts, configUpdates };\n }\n }\n\n if (dryRun) {\n return { configUpdates };\n }\n\n const configToUpdate = configUpdates.replace(/\\n/g, ' ');\n\n execSync(`npm config set ${configToUpdate}`, { stdio: 'ignore' });\n\n return { configUpdates };\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 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\n const onLoggedInFns = this.onSuccessLoginSlot.values();\n\n this.updateNpmConfig({ authToken: token as string, username: username as string })\n .then((configUpdates) => {\n onLoggedInFns.forEach((fn) => fn({ username, token: token as string, npmrcUpdateResult: configUpdates }));\n })\n .catch((error) => {\n onLoggedInFns.forEach((fn) =>\n fn({\n username,\n token: token as string,\n npmrcUpdateResult: {\n error: new Error(`failed to update npmrc. error ${error?.toString}`),\n },\n })\n );\n });\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 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 npmrcUpdateResult?: NpmConfigUpdateResult;\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 npmrcUpdateResult: loggedInParams.npmrcUpdateResult,\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 static GET_CURRENT_USER = `\n query GET_ME {\n me {\n id\n username\n image\n displayName\n }\n }\n `;\n static GET_USER_ORGANIZATIONS = `\n query GET_USER_ORGANIZATIONS {\n getUserOrganizations {\n id\n name\n } \n }\n `;\n\n static PRESET_ORGS = ['bitdev', 'teambit', 'bitdesign', 'frontend', 'backend'];\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 getCurrentUser(): Promise<CloudUser | null> {\n return this.fetchFromSymphonyViaGQL<CloudUserAPIResponse>(CloudMain.GET_CURRENT_USER).then((response) => {\n if (!response) return null;\n return {\n isLoggedIn: true,\n displayName: response.data.me.displayName,\n username: response.data.me.username,\n profileImage: response.data.me.image,\n };\n });\n }\n\n async getUserOrganizations(): Promise<CloudOrganization[] | null> {\n return this.fetchFromSymphonyViaGQL<CloudOrganizationAPIResponse>(CloudMain.GET_USER_ORGANIZATIONS).then(\n (response) => {\n if (!response) return null;\n return response.data.getUserOrganizations;\n }\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 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, 8889);\n const logoutCmd = new LogoutCmd(cloudMain);\n const whoamiCmd = new WhoamiCmd(cloudMain);\n const npmrcGenerateCmd = new NpmrcGenerateCmd(cloudMain, 8889);\n const npmrc = new NpmrcCmd();\n npmrc.commands = [npmrcGenerateCmd];\n cli.register(loginCmd, logoutCmd, whoamiCmd, npmrc);\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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"}
|
package/dist/login.cmd.d.ts
CHANGED
|
@@ -10,7 +10,8 @@ export declare class LoginCmd implements Command {
|
|
|
10
10
|
loader: boolean;
|
|
11
11
|
remoteOp: boolean;
|
|
12
12
|
skipWorkspace: boolean;
|
|
13
|
-
|
|
13
|
+
private port?;
|
|
14
|
+
constructor(cloud: CloudMain, _port?: number);
|
|
14
15
|
report([]: Iterable<any>, // eslint-disable-line no-empty-pattern
|
|
15
16
|
{ cloudDomain, port, suppressBrowserLaunch, noBrowser, machineName, }: {
|
|
16
17
|
cloudDomain?: string;
|
|
@@ -31,4 +32,6 @@ export declare class LoginCmd implements Command {
|
|
|
31
32
|
token?: string;
|
|
32
33
|
successfullyUpdatedNpmrc?: boolean;
|
|
33
34
|
}>;
|
|
35
|
+
handleNpmrcConflicts(conflicts: any): Promise<string>;
|
|
36
|
+
getNpmrcUpdateMessage(error: any): string;
|
|
34
37
|
}
|
package/dist/login.cmd.js
CHANGED
|
@@ -11,12 +11,19 @@ function _chalk() {
|
|
|
11
11
|
};
|
|
12
12
|
return data;
|
|
13
13
|
}
|
|
14
|
+
function _yesno() {
|
|
15
|
+
const data = _interopRequireDefault(require("yesno"));
|
|
16
|
+
_yesno = function () {
|
|
17
|
+
return data;
|
|
18
|
+
};
|
|
19
|
+
return data;
|
|
20
|
+
}
|
|
14
21
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
15
22
|
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; }
|
|
16
23
|
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : String(i); }
|
|
17
24
|
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); }
|
|
18
25
|
class LoginCmd {
|
|
19
|
-
constructor(cloud) {
|
|
26
|
+
constructor(cloud, _port) {
|
|
20
27
|
this.cloud = cloud;
|
|
21
28
|
_defineProperty(this, "name", 'login');
|
|
22
29
|
_defineProperty(this, "description", 'log in to Bit cloud');
|
|
@@ -26,25 +33,31 @@ class LoginCmd {
|
|
|
26
33
|
_defineProperty(this, "loader", true);
|
|
27
34
|
_defineProperty(this, "remoteOp", true);
|
|
28
35
|
_defineProperty(this, "skipWorkspace", true);
|
|
36
|
+
_defineProperty(this, "port", void 0);
|
|
37
|
+
this.port = _port?.toString();
|
|
29
38
|
}
|
|
30
39
|
async report([],
|
|
31
40
|
// eslint-disable-line no-empty-pattern
|
|
32
41
|
{
|
|
33
42
|
cloudDomain,
|
|
34
|
-
port
|
|
43
|
+
port,
|
|
35
44
|
suppressBrowserLaunch,
|
|
36
45
|
noBrowser,
|
|
37
46
|
machineName
|
|
38
47
|
}) {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
}
|
|
42
|
-
const result = await this.cloud.login(port, noBrowser, machineName, cloudDomain, undefined);
|
|
48
|
+
noBrowser = noBrowser || suppressBrowserLaunch;
|
|
49
|
+
const result = await this.cloud.login(port || this.port, noBrowser, machineName, cloudDomain, undefined);
|
|
50
|
+
let message = _chalk().default.green(`Logged in as ${result?.username}`);
|
|
43
51
|
if (result?.isAlreadyLoggedIn) {
|
|
44
|
-
return
|
|
52
|
+
return message;
|
|
53
|
+
}
|
|
54
|
+
const conflicts = result?.npmrcUpdateResult?.conflicts;
|
|
55
|
+
if (conflicts && conflicts.length > 0) {
|
|
56
|
+
message += await this.handleNpmrcConflicts(conflicts);
|
|
57
|
+
} else {
|
|
58
|
+
message += this.getNpmrcUpdateMessage(result?.npmrcUpdateResult?.error);
|
|
45
59
|
}
|
|
46
|
-
|
|
47
|
-
return _chalk().default.green(`success! logged in as ${result?.username}${npmrcUpdateResultMsg}`);
|
|
60
|
+
return message;
|
|
48
61
|
}
|
|
49
62
|
async json([],
|
|
50
63
|
// eslint-disable-line no-empty-pattern,
|
|
@@ -62,9 +75,36 @@ class LoginCmd {
|
|
|
62
75
|
return {
|
|
63
76
|
username: result?.username,
|
|
64
77
|
token: result?.token,
|
|
65
|
-
successfullyUpdatedNpmrc: result?.npmrcUpdateResult?.
|
|
78
|
+
successfullyUpdatedNpmrc: !!result?.npmrcUpdateResult?.configUpdates
|
|
66
79
|
};
|
|
67
80
|
}
|
|
81
|
+
async handleNpmrcConflicts(conflicts) {
|
|
82
|
+
this.cloud.logger.clearStatusLine();
|
|
83
|
+
const conflictDetails = conflicts.map((conflict, index) => `${_chalk().default.yellow(`Conflict #${index + 1}:`)}
|
|
84
|
+
Original: ${_chalk().default.red(conflict.original)}
|
|
85
|
+
Modification: ${_chalk().default.green(conflict.modifications)}`).join('\n\n');
|
|
86
|
+
const question = `\n${_chalk().default.yellow('Conflict detected in .npmrc file with the following configurations:')}\n${conflictDetails}\n${_chalk().default.yellow('Do you want to override these configurations and continue? [yes(y)/no(n)]')}`;
|
|
87
|
+
const ok = await (0, _yesno().default)({
|
|
88
|
+
question
|
|
89
|
+
});
|
|
90
|
+
if (!ok) {
|
|
91
|
+
return _chalk().default.red(' but updating .npmrc was aborted due to conflicts.');
|
|
92
|
+
}
|
|
93
|
+
try {
|
|
94
|
+
await this.cloud.generateNpmrc({
|
|
95
|
+
force: true
|
|
96
|
+
});
|
|
97
|
+
return _chalk().default.green(' and .npmrc updated successfully after resolving conflicts.');
|
|
98
|
+
} catch (e) {
|
|
99
|
+
return `${_chalk().default.red(' but failed to update .npmrc after resolving conflicts.')} Visit ${_chalk().default.bold('https://bit.dev/reference/packages/npmrc')} for instructions on how to update it manually.`;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
getNpmrcUpdateMessage(error) {
|
|
103
|
+
if (!error) {
|
|
104
|
+
return _chalk().default.green(' and .npmrc updated.');
|
|
105
|
+
}
|
|
106
|
+
return _chalk().default.red(` but failed to update .npmrc. Visit ${_chalk().default.bold('https://bit.dev/reference/packages/npmrc')} for instructions on how to update it manually.`);
|
|
107
|
+
}
|
|
68
108
|
}
|
|
69
109
|
exports.LoginCmd = LoginCmd;
|
|
70
110
|
|
package/dist/login.cmd.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_chalk","data","_interopRequireDefault","require","obj","__esModule","default","_defineProperty","key","value","_toPropertyKey","Object","defineProperty","enumerable","configurable","writable","t","i","_toPrimitive","String","r","e","Symbol","toPrimitive","call","TypeError","Number","LoginCmd","constructor","cloud","
|
|
1
|
+
{"version":3,"names":["_chalk","data","_interopRequireDefault","require","_yesno","obj","__esModule","default","_defineProperty","key","value","_toPropertyKey","Object","defineProperty","enumerable","configurable","writable","t","i","_toPrimitive","String","r","e","Symbol","toPrimitive","call","TypeError","Number","LoginCmd","constructor","cloud","_port","port","toString","report","cloudDomain","suppressBrowserLaunch","noBrowser","machineName","result","login","undefined","message","chalk","green","username","isAlreadyLoggedIn","conflicts","npmrcUpdateResult","length","handleNpmrcConflicts","getNpmrcUpdateMessage","error","json","token","successfullyUpdatedNpmrc","configUpdates","logger","clearStatusLine","conflictDetails","map","conflict","index","yellow","red","original","modifications","join","question","ok","yesno","generateNpmrc","force","bold","exports"],"sources":["login.cmd.ts"],"sourcesContent":["import chalk from 'chalk';\nimport yesno from 'yesno';\nimport { Command, CommandOptions } from '@teambit/cli';\nimport { CloudMain } from './cloud.main.runtime';\n\nexport class LoginCmd implements Command {\n name = 'login';\n description = 'log in to Bit cloud';\n group = 'general';\n alias = '';\n options = [\n ['d', 'cloud-domain <domain>', 'login cloud domain (default bit.cloud)'],\n ['p', 'port <port>', 'port number to open for localhost server (default 8085)'],\n ['', 'no-browser', 'do not open a browser for authentication'],\n [\n '',\n 'machine-name <name>',\n 'specify machine-name to pair with the token (useful for CI to avoid accidentally revoking the token)',\n ],\n ['', 'suppress-browser-launch', 'DEPRECATE. use --no-browser instead'],\n ] as CommandOptions;\n loader = true;\n remoteOp = true;\n skipWorkspace = true;\n\n private port?: string;\n\n constructor(private cloud: CloudMain, _port?: number) {\n this.port = _port?.toString();\n }\n\n async report(\n [], // eslint-disable-line no-empty-pattern\n {\n cloudDomain,\n port,\n suppressBrowserLaunch,\n noBrowser,\n machineName,\n }: {\n cloudDomain?: string;\n port: string;\n suppressBrowserLaunch?: boolean;\n noBrowser?: boolean;\n machineName?: string;\n }\n ): Promise<string> {\n noBrowser = noBrowser || suppressBrowserLaunch;\n\n const result = await this.cloud.login(port || this.port, noBrowser, machineName, cloudDomain, undefined);\n let message = chalk.green(`Logged in as ${result?.username}`);\n\n if (result?.isAlreadyLoggedIn) {\n return message;\n }\n\n const conflicts = result?.npmrcUpdateResult?.conflicts;\n if (conflicts && conflicts.length > 0) {\n message += await this.handleNpmrcConflicts(conflicts);\n } else {\n message += this.getNpmrcUpdateMessage(result?.npmrcUpdateResult?.error);\n }\n\n return message;\n }\n\n async json(\n [], // eslint-disable-line no-empty-pattern,\n {\n cloudDomain,\n port,\n suppressBrowserLaunch,\n noBrowser,\n machineName,\n }: {\n cloudDomain?: string;\n port: string;\n suppressBrowserLaunch?: boolean;\n noBrowser?: boolean;\n machineName?: string;\n }\n ): Promise<{ username?: string; token?: string; successfullyUpdatedNpmrc?: boolean }> {\n if (suppressBrowserLaunch) {\n noBrowser = true;\n }\n const result = await this.cloud.login(port, noBrowser, machineName, cloudDomain);\n return {\n username: result?.username,\n token: result?.token,\n successfullyUpdatedNpmrc: !!result?.npmrcUpdateResult?.configUpdates,\n };\n }\n\n async handleNpmrcConflicts(conflicts): Promise<string> {\n this.cloud.logger.clearStatusLine();\n const conflictDetails = conflicts\n .map(\n (conflict, index) =>\n `${chalk.yellow(`Conflict #${index + 1}:`)}\nOriginal: ${chalk.red(conflict.original)}\nModification: ${chalk.green(conflict.modifications)}`\n )\n .join('\\n\\n');\n\n const question = `\\n${chalk.yellow(\n 'Conflict detected in .npmrc file with the following configurations:'\n )}\\n${conflictDetails}\\n${chalk.yellow(\n 'Do you want to override these configurations and continue? [yes(y)/no(n)]'\n )}`;\n\n const ok = await yesno({ question });\n if (!ok) {\n return chalk.red(' but updating .npmrc was aborted due to conflicts.');\n }\n\n try {\n await this.cloud.generateNpmrc({ force: true });\n return chalk.green(' and .npmrc updated successfully after resolving conflicts.');\n } catch (e) {\n return `${chalk.red(' but failed to update .npmrc after resolving conflicts.')} Visit ${chalk.bold(\n 'https://bit.dev/reference/packages/npmrc'\n )} for instructions on how to update it manually.`;\n }\n }\n\n getNpmrcUpdateMessage(error): string {\n if (!error) {\n return chalk.green(' and .npmrc updated.');\n }\n return chalk.red(\n ` but failed to update .npmrc. Visit ${chalk.bold(\n 'https://bit.dev/reference/packages/npmrc'\n )} for instructions on how to update it manually.`\n );\n }\n}\n"],"mappings":"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"}
|