@teambit/cloud 0.0.441 → 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.
@@ -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,14 +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
- generateNpmrc({ dryRun }?: {
67
+ getNpmConfig(): Record<string, string>;
68
+ generateNpmrc({ dryRun, force }?: {
64
69
  dryRun?: boolean;
65
- }): Promise<string>;
66
- updateNpmConfig({ authToken, username, dryRun, }: {
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, }: {
67
86
  authToken: string;
68
87
  username: string;
69
88
  dryRun?: boolean;
70
- }): Promise<string>;
89
+ force?: boolean;
90
+ }): Promise<{
91
+ conflicts?: {
92
+ original: string;
93
+ modifications: string;
94
+ }[];
95
+ configUpdates?: string;
96
+ }>;
71
97
  setupAuthListener({ port: portFromParams, clientId, }?: {
72
98
  port?: number;
73
99
  clientId?: string;
@@ -101,11 +127,7 @@ export declare class CloudMain {
101
127
  isAlreadyLoggedIn?: boolean;
102
128
  username?: string;
103
129
  token?: string;
104
- npmrcUpdateResult?: {
105
- success?: boolean;
106
- error?: Error;
107
- configUpdates?: string;
108
- };
130
+ npmrcUpdateResult?: NpmConfigUpdateResult;
109
131
  } | null>;
110
132
  static GET_SCOPES: string;
111
133
  static GET_CURRENT_USER: string;
@@ -193,8 +193,19 @@ class CloudMain {
193
193
  _defineProperty(this, "authListenerByPort", new Map());
194
194
  _defineProperty(this, "REDIRECT_URL", void 0);
195
195
  }
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
+ }
196
206
  async generateNpmrc({
197
- dryRun
207
+ dryRun,
208
+ force
198
209
  } = {}) {
199
210
  const authToken = this.getAuthToken();
200
211
  const username = this.getUsername();
@@ -204,26 +215,70 @@ class CloudMain {
204
215
  return this.updateNpmConfig({
205
216
  authToken,
206
217
  username,
207
- dryRun
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
+ }
208
241
  });
242
+ return conflicts;
209
243
  }
210
244
  async updateNpmConfig({
211
245
  authToken,
212
246
  username,
213
- dryRun
247
+ dryRun,
248
+ force
214
249
  }) {
215
250
  const orgs = (await this.getUserOrganizations()) ?? [];
216
251
  const orgNames = orgs.map(org => org.name);
217
- const allOrgs = [...CloudMain.PRESET_ORGS, ...orgNames, username].sort();
218
- const registryUrl = this.getRegistryUrl();
219
- const scopeConfig = allOrgs.map(org => `@${org}:registry="${registryUrl}"`).join(' ');
220
- const authConfig = `//${new URL(registryUrl).host}/:_authToken="${authToken}"`;
221
- const configUpdates = `${scopeConfig} ${authConfig}`;
222
- if (!dryRun) (0, _child_process().execSync)(`npm config set ${configUpdates}`, {
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}`, {
223
277
  stdio: 'ignore'
224
278
  });
225
- if (dryRun) return configUpdates.replace(/ /g, '\n');
226
- return configUpdates;
279
+ return {
280
+ configUpdates
281
+ };
227
282
  }
228
283
  setupAuthListener({
229
284
  port: portFromParams,
@@ -310,17 +365,13 @@ class CloudMain {
310
365
  onLoggedInFns.forEach(fn => fn({
311
366
  username,
312
367
  token: token,
313
- npmrcUpdateResult: {
314
- success: true,
315
- configUpdates
316
- }
368
+ npmrcUpdateResult: configUpdates
317
369
  }));
318
370
  }).catch(error => {
319
371
  onLoggedInFns.forEach(fn => fn({
320
372
  username,
321
373
  token: token,
322
374
  npmrcUpdateResult: {
323
- success: false,
324
375
  error: new Error(`failed to update npmrc. error ${error?.toString}`)
325
376
  }
326
377
  }));
@@ -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","_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","generateNpmrc","dryRun","authToken","getAuthToken","username","getUsername","Error","updateNpmConfig","orgs","getUserOrganizations","orgNames","map","org","name","allOrgs","PRESET_ORGS","sort","registryUrl","getRegistryUrl","scopeConfig","join","authConfig","URL","host","configUpdates","execSync","stdio","replace","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","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","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","JSON","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?: {\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 generateNpmrc({ dryRun }: { dryRun?: boolean } = {}): Promise<string> {\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 });\n }\n\n async updateNpmConfig({\n authToken,\n username,\n dryRun,\n }: {\n authToken: string;\n username: string;\n dryRun?: boolean;\n }): Promise<string> {\n const orgs = (await this.getUserOrganizations()) ?? [];\n const orgNames = orgs.map((org) => org.name);\n const allOrgs = [...CloudMain.PRESET_ORGS, ...orgNames, username].sort();\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 if (!dryRun) execSync(`npm config set ${configUpdates}`, { stdio: 'ignore' });\n if (dryRun) return configUpdates.replace(/ /g, '\\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) =>\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, 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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"}
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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"}
@@ -32,4 +32,6 @@ export declare class LoginCmd implements Command {
32
32
  token?: string;
33
33
  successfullyUpdatedNpmrc?: boolean;
34
34
  }>;
35
+ handleNpmrcConflicts(conflicts: any): Promise<string>;
36
+ getNpmrcUpdateMessage(error: any): string;
35
37
  }
package/dist/login.cmd.js CHANGED
@@ -11,6 +11,13 @@ 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); }
@@ -38,15 +45,19 @@ class LoginCmd {
38
45
  noBrowser,
39
46
  machineName
40
47
  }) {
41
- if (suppressBrowserLaunch) {
42
- noBrowser = true;
43
- }
48
+ noBrowser = noBrowser || suppressBrowserLaunch;
44
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}`);
45
51
  if (result?.isAlreadyLoggedIn) {
46
- return _chalk().default.yellow(`already logged in as ${result?.username}`);
52
+ return message;
47
53
  }
48
- const npmrcUpdateResultMsg = result?.npmrcUpdateResult?.success ? ' and .npmrc updated' : _chalk().default.red(` but failed to update .npmrc. Visit https://bit.dev/reference/packages/npmrc for instructions on how to update it manually`);
49
- return _chalk().default.green(`success! logged in as ${result?.username}${npmrcUpdateResultMsg}`);
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);
59
+ }
60
+ return message;
50
61
  }
51
62
  async json([],
52
63
  // eslint-disable-line no-empty-pattern,
@@ -64,9 +75,36 @@ class LoginCmd {
64
75
  return {
65
76
  username: result?.username,
66
77
  token: result?.token,
67
- successfullyUpdatedNpmrc: result?.npmrcUpdateResult?.success
78
+ successfullyUpdatedNpmrc: !!result?.npmrcUpdateResult?.configUpdates
68
79
  };
69
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
+ }
70
108
  }
71
109
  exports.LoginCmd = LoginCmd;
72
110
 
@@ -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","_port","port","toString","report","cloudDomain","suppressBrowserLaunch","noBrowser","machineName","result","login","undefined","isAlreadyLoggedIn","chalk","yellow","username","npmrcUpdateResultMsg","npmrcUpdateResult","success","red","green","json","token","successfullyUpdatedNpmrc","exports"],"sources":["login.cmd.ts"],"sourcesContent":["import chalk from 'chalk';\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 if (suppressBrowserLaunch) {\n noBrowser = true;\n }\n const result = await this.cloud.login(port || this.port, noBrowser, machineName, cloudDomain, undefined);\n if (result?.isAlreadyLoggedIn) {\n return chalk.yellow(`already logged in as ${result?.username}`);\n }\n const npmrcUpdateResultMsg = result?.npmrcUpdateResult?.success\n ? ' and .npmrc updated'\n : chalk.red(\n ` but failed to update .npmrc. Visit https://bit.dev/reference/packages/npmrc for instructions on how to update it manually`\n );\n return chalk.green(`success! logged in as ${result?.username}${npmrcUpdateResultMsg}`);\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?.success,\n };\n }\n}\n"],"mappings":"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"}
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":";;;;;;AAAA,SAAAA,OAAA;EAAA,MAAAC,IAAA,GAAAC,sBAAA,CAAAC,OAAA;EAAAH,MAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAG,OAAA;EAAA,MAAAH,IAAA,GAAAC,sBAAA,CAAAC,OAAA;EAAAC,MAAA,YAAAA,CAAA;IAAA,OAAAH,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAA0B,SAAAC,uBAAAG,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAAA,SAAAG,gBAAAH,GAAA,EAAAI,GAAA,EAAAC,KAAA,IAAAD,GAAA,GAAAE,cAAA,CAAAF,GAAA,OAAAA,GAAA,IAAAJ,GAAA,IAAAO,MAAA,CAAAC,cAAA,CAAAR,GAAA,EAAAI,GAAA,IAAAC,KAAA,EAAAA,KAAA,EAAAI,UAAA,QAAAC,YAAA,QAAAC,QAAA,oBAAAX,GAAA,CAAAI,GAAA,IAAAC,KAAA,WAAAL,GAAA;AAAA,SAAAM,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;AAInB,MAAMW,QAAQ,CAAoB;EAsBvCC,WAAWA,CAASC,KAAgB,EAAEC,KAAc,EAAE;IAAA,KAAlCD,KAAgB,GAAhBA,KAAgB;IAAAtB,eAAA,eArB7B,OAAO;IAAAA,eAAA,sBACA,qBAAqB;IAAAA,eAAA,gBAC3B,SAAS;IAAAA,eAAA,gBACT,EAAE;IAAAA,eAAA,kBACA,CACR,CAAC,GAAG,EAAE,uBAAuB,EAAE,wCAAwC,CAAC,EACxE,CAAC,GAAG,EAAE,aAAa,EAAE,yDAAyD,CAAC,EAC/E,CAAC,EAAE,EAAE,YAAY,EAAE,0CAA0C,CAAC,EAC9D,CACE,EAAE,EACF,qBAAqB,EACrB,sGAAsG,CACvG,EACD,CAAC,EAAE,EAAE,yBAAyB,EAAE,qCAAqC,CAAC,CACvE;IAAAA,eAAA,iBACQ,IAAI;IAAAA,eAAA,mBACF,IAAI;IAAAA,eAAA,wBACC,IAAI;IAAAA,eAAA;IAKlB,IAAI,CAACwB,IAAI,GAAGD,KAAK,EAAEE,QAAQ,CAAC,CAAC;EAC/B;EAEA,MAAMC,MAAMA,CACV,EAAE;EAAE;EACJ;IACEC,WAAW;IACXH,IAAI;IACJI,qBAAqB;IACrBC,SAAS;IACTC;EAOF,CAAC,EACgB;IACjBD,SAAS,GAAGA,SAAS,IAAID,qBAAqB;IAE9C,MAAMG,MAAM,GAAG,MAAM,IAAI,CAACT,KAAK,CAACU,KAAK,CAACR,IAAI,IAAI,IAAI,CAACA,IAAI,EAAEK,SAAS,EAAEC,WAAW,EAAEH,WAAW,EAAEM,SAAS,CAAC;IACxG,IAAIC,OAAO,GAAGC,gBAAK,CAACC,KAAK,CAAE,gBAAeL,MAAM,EAAEM,QAAS,EAAC,CAAC;IAE7D,IAAIN,MAAM,EAAEO,iBAAiB,EAAE;MAC7B,OAAOJ,OAAO;IAChB;IAEA,MAAMK,SAAS,GAAGR,MAAM,EAAES,iBAAiB,EAAED,SAAS;IACtD,IAAIA,SAAS,IAAIA,SAAS,CAACE,MAAM,GAAG,CAAC,EAAE;MACrCP,OAAO,IAAI,MAAM,IAAI,CAACQ,oBAAoB,CAACH,SAAS,CAAC;IACvD,CAAC,MAAM;MACLL,OAAO,IAAI,IAAI,CAACS,qBAAqB,CAACZ,MAAM,EAAES,iBAAiB,EAAEI,KAAK,CAAC;IACzE;IAEA,OAAOV,OAAO;EAChB;EAEA,MAAMW,IAAIA,CACR,EAAE;EAAE;EACJ;IACElB,WAAW;IACXH,IAAI;IACJI,qBAAqB;IACrBC,SAAS;IACTC;EAOF,CAAC,EACmF;IACpF,IAAIF,qBAAqB,EAAE;MACzBC,SAAS,GAAG,IAAI;IAClB;IACA,MAAME,MAAM,GAAG,MAAM,IAAI,CAACT,KAAK,CAACU,KAAK,CAACR,IAAI,EAAEK,SAAS,EAAEC,WAAW,EAAEH,WAAW,CAAC;IAChF,OAAO;MACLU,QAAQ,EAAEN,MAAM,EAAEM,QAAQ;MAC1BS,KAAK,EAAEf,MAAM,EAAEe,KAAK;MACpBC,wBAAwB,EAAE,CAAC,CAAChB,MAAM,EAAES,iBAAiB,EAAEQ;IACzD,CAAC;EACH;EAEA,MAAMN,oBAAoBA,CAACH,SAAS,EAAmB;IACrD,IAAI,CAACjB,KAAK,CAAC2B,MAAM,CAACC,eAAe,CAAC,CAAC;IACnC,MAAMC,eAAe,GAAGZ,SAAS,CAC9Ba,GAAG,CACF,CAACC,QAAQ,EAAEC,KAAK,KACb,GAAEnB,gBAAK,CAACoB,MAAM,CAAE,aAAYD,KAAK,GAAG,CAAE,GAAE,CAAE;AACrD,YAAYnB,gBAAK,CAACqB,GAAG,CAACH,QAAQ,CAACI,QAAQ,CAAE;AACzC,gBAAgBtB,gBAAK,CAACC,KAAK,CAACiB,QAAQ,CAACK,aAAa,CAAE,EAC9C,CAAC,CACAC,IAAI,CAAC,MAAM,CAAC;IAEf,MAAMC,QAAQ,GAAI,KAAIzB,gBAAK,CAACoB,MAAM,CAChC,qEACF,CAAE,KAAIJ,eAAgB,KAAIhB,gBAAK,CAACoB,MAAM,CACpC,2EACF,CAAE,EAAC;IAEH,MAAMM,EAAE,GAAG,MAAM,IAAAC,gBAAK,EAAC;MAAEF;IAAS,CAAC,CAAC;IACpC,IAAI,CAACC,EAAE,EAAE;MACP,OAAO1B,gBAAK,CAACqB,GAAG,CAAC,oDAAoD,CAAC;IACxE;IAEA,IAAI;MACF,MAAM,IAAI,CAAClC,KAAK,CAACyC,aAAa,CAAC;QAAEC,KAAK,EAAE;MAAK,CAAC,CAAC;MAC/C,OAAO7B,gBAAK,CAACC,KAAK,CAAC,6DAA6D,CAAC;IACnF,CAAC,CAAC,OAAOtB,CAAC,EAAE;MACV,OAAQ,GAAEqB,gBAAK,CAACqB,GAAG,CAAC,yDAAyD,CAAE,UAASrB,gBAAK,CAAC8B,IAAI,CAChG,0CACF,CAAE,iDAAgD;IACpD;EACF;EAEAtB,qBAAqBA,CAACC,KAAK,EAAU;IACnC,IAAI,CAACA,KAAK,EAAE;MACV,OAAOT,gBAAK,CAACC,KAAK,CAAC,sBAAsB,CAAC;IAC5C;IACA,OAAOD,gBAAK,CAACqB,GAAG,CACb,uCAAsCrB,gBAAK,CAAC8B,IAAI,CAC/C,0CACF,CAAE,iDACJ,CAAC;EACH;AACF;AAACC,OAAA,CAAA9C,QAAA,GAAAA,QAAA"}
@@ -12,8 +12,16 @@ export declare class NpmrcGenerateCmd implements Command {
12
12
  constructor(cloud: CloudMain, _port?: number);
13
13
  report(_: any, flags: Flags): Promise<string>;
14
14
  json(): Promise<{
15
- config: string;
15
+ config: {
16
+ conflicts?: {
17
+ original: string;
18
+ modifications: string;
19
+ }[] | undefined;
20
+ configUpdates?: string | undefined;
21
+ };
16
22
  }>;
23
+ extractConflictDetails(conflicts: any): any;
24
+ handleNpmrcConflicts(conflicts: any): Promise<string>;
17
25
  }
18
26
  export declare class NpmrcCmd implements Command {
19
27
  name: string;
package/dist/npmrc.cmd.js CHANGED
@@ -29,7 +29,7 @@ class NpmrcGenerateCmd {
29
29
  _defineProperty(this, "description", 'update npmrc file with scope, registry, and token information from bit.cloud');
30
30
  _defineProperty(this, "group", 'cloud');
31
31
  _defineProperty(this, "alias", '');
32
- _defineProperty(this, "options", [['', 'dry-run', 'show the .npmrc file content that will be written']]);
32
+ _defineProperty(this, "options", [['', 'dry-run', 'show the .npmrc file content that will be written'], ['f', 'force', 'force update the .npmrc file even if there are conflicts']]);
33
33
  _defineProperty(this, "skipWorkspace", false);
34
34
  _defineProperty(this, "port", void 0);
35
35
  this.port = _port?.toString();
@@ -46,13 +46,22 @@ class NpmrcGenerateCmd {
46
46
  }
47
47
  await this.cloud.login(this.port);
48
48
  }
49
- const config = await this.cloud.generateNpmrc({
49
+ const updateResult = await this.cloud.generateNpmrc({
50
+ force: flags.force,
50
51
  dryRun: flags.dryRun
51
52
  });
52
53
  if (flags.dryRun) {
53
- return _chalk().default.green(`.npmrc file content that will be written:\n${config}`);
54
+ let message = _chalk().default.green(`.npmrc file content that would be written:\n\n${updateResult.configUpdates}`);
55
+ if (updateResult.conflicts && updateResult.conflicts.length > 0) {
56
+ const conflictDetails = this.extractConflictDetails(updateResult.conflicts);
57
+ message += `\n\n${_chalk().default.yellow('Conflicts detected:')} \n${conflictDetails}\n${_chalk().default.yellow('Use --force to override these conflicts.')}`;
58
+ }
59
+ return message;
60
+ }
61
+ if (updateResult.conflicts && updateResult.conflicts.length > 0) {
62
+ return this.handleNpmrcConflicts(updateResult.conflicts);
54
63
  }
55
- return _chalk().default.green(`.npmrc file has been updated successfully`);
64
+ return _chalk().default.green('The .npmrc file has been updated successfully.');
56
65
  }
57
66
  async json() {
58
67
  const config = await this.cloud.generateNpmrc();
@@ -60,6 +69,25 @@ class NpmrcGenerateCmd {
60
69
  config
61
70
  };
62
71
  }
72
+ extractConflictDetails(conflicts) {
73
+ return conflicts.map((conflict, index) => `${_chalk().default.yellow(`Conflict #${index + 1}:`)}
74
+ Original: ${_chalk().default.red(conflict.original)}
75
+ Modification: ${_chalk().default.green(conflict.modifications)}`).join('\n\n');
76
+ }
77
+ async handleNpmrcConflicts(conflicts) {
78
+ const conflictDetails = this.extractConflictDetails(conflicts);
79
+ 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)]')}`;
80
+ const ok = await (0, _yesno().default)({
81
+ question
82
+ });
83
+ if (!ok) {
84
+ return _chalk().default.red('Updating .npmrc was aborted due to conflicts.');
85
+ }
86
+ await this.cloud.generateNpmrc({
87
+ force: true
88
+ });
89
+ return _chalk().default.green('.npmrc has been updated successfully after resolving conflicts.');
90
+ }
63
91
  }
64
92
  exports.NpmrcGenerateCmd = NpmrcGenerateCmd;
65
93
  class NpmrcCmd {