@teambit/cloud 0.0.1366 → 0.0.1368
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.
|
@@ -125,6 +125,12 @@ export declare class CloudMain {
|
|
|
125
125
|
cloudDomain?: string;
|
|
126
126
|
port?: string;
|
|
127
127
|
}): Promise<string | null>;
|
|
128
|
+
/**
|
|
129
|
+
* Build the login url the browser is sent to. Always advertises the port the listener actually
|
|
130
|
+
* bound to — setupAuthListener falls back to the next free port when the requested one is taken,
|
|
131
|
+
* and advertising the requested port would point the browser at a port with no server behind it.
|
|
132
|
+
*/
|
|
133
|
+
private buildLoginUrl;
|
|
128
134
|
logout(): Promise<void>;
|
|
129
135
|
setRedirectUrl(redirectUrl: string): void;
|
|
130
136
|
whoami(): Promise<string | undefined>;
|
|
@@ -334,9 +334,18 @@ class CloudMain {
|
|
|
334
334
|
if (code === 'EADDRINUSE') {
|
|
335
335
|
// set up a new auth listener with new port
|
|
336
336
|
this.logger.warn(`port: ${port} already in use for cloud auth listener, trying port ${port + 1}`);
|
|
337
|
+
// The entry for this port was added optimistically (before listen() ran). listen() just
|
|
338
|
+
// failed, so remove the stale, server-less entry — otherwise getLoginUrl/getLoginPort
|
|
339
|
+
// callers can resolve to a port that has no server behind it.
|
|
340
|
+
this.authListenerByPort.delete(port);
|
|
341
|
+
// Forward clientId/skipConfigUpdate/cloudDomain so the retried listener keeps the same
|
|
342
|
+
// identity and honors the original options (previously they were dropped on the bump).
|
|
337
343
|
// eslint-disable-next-line promise/no-promise-in-callback
|
|
338
344
|
this.setupAuthListener({
|
|
339
|
-
port: port + 1
|
|
345
|
+
port: port + 1,
|
|
346
|
+
clientId,
|
|
347
|
+
skipConfigUpdate,
|
|
348
|
+
cloudDomain
|
|
340
349
|
}).then(resolve).catch(reject);
|
|
341
350
|
return;
|
|
342
351
|
}
|
|
@@ -493,13 +502,28 @@ class CloudMain {
|
|
|
493
502
|
}
|
|
494
503
|
const authListenerForPort = this.authListenerByPort.get(port);
|
|
495
504
|
if (authListenerForPort) {
|
|
496
|
-
return
|
|
505
|
+
return this.buildLoginUrl(loginUrl, authListenerForPort, machineName);
|
|
497
506
|
}
|
|
498
507
|
const authListener = await this.setupAuthListener({
|
|
499
508
|
port
|
|
500
509
|
});
|
|
501
510
|
if (!authListener) return null;
|
|
502
|
-
return
|
|
511
|
+
return this.buildLoginUrl(loginUrl, authListener, machineName);
|
|
512
|
+
}
|
|
513
|
+
|
|
514
|
+
/**
|
|
515
|
+
* Build the login url the browser is sent to. Always advertises the port the listener actually
|
|
516
|
+
* bound to — setupAuthListener falls back to the next free port when the requested one is taken,
|
|
517
|
+
* and advertising the requested port would point the browser at a port with no server behind it.
|
|
518
|
+
*/
|
|
519
|
+
buildLoginUrl(loginUrl, authListener, machineName) {
|
|
520
|
+
// Percent-encode every value. deviceName comes from --machine-name or os.hostname(), either of
|
|
521
|
+
// which can contain spaces, '&', '#' or non-ascii characters. encodeURI() is not sufficient —
|
|
522
|
+
// it leaves '&', '#' and '+' intact, so a machine named `home & away #1` would truncate the
|
|
523
|
+
// query string and drop the params that follow it.
|
|
524
|
+
const params = [['port', String(authListener.port)], ['clientId', authListener.clientId ?? ''], ['responseType', 'token'], ['deviceName', machineName || _os().default.hostname()], ['os', process.platform]];
|
|
525
|
+
const query = params.map(([key, value]) => `${key}=${encodeURIComponent(value)}`).join('&');
|
|
526
|
+
return `${loginUrl}?${query}`;
|
|
503
527
|
}
|
|
504
528
|
async logout() {
|
|
505
529
|
await this.configStore.delConfig(_legacy().CFG_USER_TOKEN_KEY);
|
|
@@ -557,7 +581,7 @@ class CloudMain {
|
|
|
557
581
|
});
|
|
558
582
|
return;
|
|
559
583
|
}
|
|
560
|
-
const promptLogin = async
|
|
584
|
+
const promptLogin = async authListener => {
|
|
561
585
|
this.REDIRECT_URL = redirectUrl;
|
|
562
586
|
this.registerOnSuccessLogin(loggedInParams => {
|
|
563
587
|
resolve({
|
|
@@ -570,7 +594,11 @@ class CloudMain {
|
|
|
570
594
|
const loginUrl = await this.getLoginUrl({
|
|
571
595
|
machineName,
|
|
572
596
|
cloudDomain,
|
|
573
|
-
port
|
|
597
|
+
// Use the port the auth listener actually bound to. When the requested port is already
|
|
598
|
+
// in use, setupAuthListener falls back to the next free port (EADDRINUSE bump); building
|
|
599
|
+
// the URL from the requested port would tell the browser to POST the token to a port with
|
|
600
|
+
// no server behind it, so the token is never received and login hangs ("locked out").
|
|
601
|
+
port: authListener?.port !== undefined ? String(authListener.port) : port
|
|
574
602
|
});
|
|
575
603
|
if (!loginUrl) {
|
|
576
604
|
reject(new Error('Failed to get login url'));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_harmony","data","require","_cli","_uuid","_chalk","_interopRequireDefault","_os","_open","_scopes","_scopes2","_logger","_legacy","_scope","_scope2","_graphql","_workspace","_express","_child_process","_ui","_cloud","_cloud2","_login","_logout","_whoami","_npmrc","_configStore","_CloudMain","e","__esModule","default","ownKeys","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","_toPropertyKey","value","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","HTTPS","CloudMain","constructor","config","logger","express","workspace","scope","configStore","onSuccessLoginSlot","Map","getNpmConfig","output","execFileSync","encoding","JSON","parse","error","Error","generateNpmrc","dryRun","force","authToken","getAuthToken","currentUser","getCurrentUser","username","warn","getUsername","updateNpmConfig","detectConfigConflicts","newConfigs","registryDomain","existingConfigs","conflicts","split","line","key","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","configEntries","host","configUpdates","join","getCloudDomain","npmConfigArgs","stdio","setupAuthListener","port","portFromParams","clientId","v4","skipConfigUpdate","cloudDomain","Promise","resolve","reject","getLoginPort","existingAuthListener","authListenerByPort","get","debug","expressApp","createApp","set","authServer","listen","existing","server","on","err","code","then","catch","req","res","query","clientIdFromReq","redirectUri","usernameFromReq","undefined","token","isArray","status","send","setConfig","CFG_USER_TOKEN_KEY","CFG_USER_NAME_KEY","onLoggedInFns","values","updatedConfigs","updateGlobalConfigOnLogin","fn","npmrcUpdateResult","toString","REDIRECT_URL","redirect","ERROR_RESPONSE","registerOnSuccessLogin","onSuccessLoginFn","register","getCloudHubDomain","cloudHubDomain","getCloudApi","cloudApi","getCloudGraphQL","cloudGraphQL","getLoginDomain","loginDomain","getAnalyticsDomain","analyticsDomain","getCloudExporterUrl","cloudExporterUrl","getHubName","cloudHubName","loginPort","DEFAULT_PORT","isLoggedIn","Boolean","processToken","globalFlags","getConfig","getAuthHeader","Authorization","ensureHttps","url","startsWith","calculateLoginDomain","finalCloudDomain","endsWith","getLoginUrl","redirectUrl","machineName","loginUrl","authListenerForPort","os","hostname","process","platform","authListener","encodeURI","logout","delConfig","setRedirectUrl","whoami","globalConfigsToUpdateOnLogin","domain","currentCloudDomain","CFG_CLOUD_DOMAIN_KEY","DEFAULT_CLOUD_DOMAIN","configsToUpdate","entries","clearCachedUrls","calculateConfig","login","suppressBrowserLaunch","defaultCloudDomain","isAlreadyLoggedIn","promptLogin","loggedInParams","globalConfigUpdates","console","log","chalk","yellow","open","getCloudScopes","scopes","remotes","getRemoteScopes","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","DEFAULT_HUB_DOMAIN","getSymphonyUrl","SYMPHONY_GRAPHQL","DEFAULT_ANALYTICS_DOMAIN","CENTRAL_BIT_HUB_URL","CENTRAL_BIT_HUB_NAME","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","ConfigStoreAspect","CLIAspect","UIAspect","MainRuntime","addRuntime"],"sources":["cloud.main.runtime.ts"],"sourcesContent":["import type { SlotRegistry } from '@teambit/harmony';\nimport { Slot } from '@teambit/harmony';\nimport type { CLIMain } from '@teambit/cli';\nimport { CLIAspect, MainRuntime, globalFlags } from '@teambit/cli';\nimport { v4 } from 'uuid';\nimport chalk from 'chalk';\nimport os from 'os';\nimport open from 'open';\nimport type * as http from 'http';\nimport type { Express } from 'express';\nimport type { GetScopesGQLResponse } from '@teambit/cloud.models.cloud-scope';\nimport type { CloudUser, CloudUserAPIResponse } from '@teambit/cloud.models.cloud-user';\nimport { ScopeDescriptor } from '@teambit/scopes.scope-descriptor';\nimport { ScopeID } from '@teambit/scopes.scope-id';\nimport type { Logger, LoggerMain } from '@teambit/logger';\nimport { LoggerAspect } from '@teambit/logger';\nimport {\n getCloudDomain,\n DEFAULT_HUB_DOMAIN,\n getSymphonyUrl,\n SYMPHONY_GRAPHQL,\n getLoginUrl,\n DEFAULT_ANALYTICS_DOMAIN,\n getRegistryUrl,\n clearCachedUrls,\n CENTRAL_BIT_HUB_URL,\n CENTRAL_BIT_HUB_NAME,\n CFG_USER_TOKEN_KEY,\n CFG_USER_NAME_KEY,\n DEFAULT_CLOUD_DOMAIN,\n CFG_CLOUD_DOMAIN_KEY,\n} from '@teambit/legacy.constants';\nimport type { ScopeMain } from '@teambit/scope';\nimport { ScopeAspect } from '@teambit/scope';\nimport { fetchWithAgent as fetch } from '@teambit/scope.network';\nimport type { GraphqlMain } from '@teambit/graphql';\nimport { GraphqlAspect } from '@teambit/graphql';\nimport type { Workspace } from '@teambit/workspace';\nimport { WorkspaceAspect } from '@teambit/workspace';\nimport type { ExpressMain } from '@teambit/express';\nimport { ExpressAspect } from '@teambit/express';\nimport { execFileSync } from 'child_process';\nimport type { UiMain } from '@teambit/ui';\nimport { UIAspect } 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';\nimport type { ConfigStoreMain } from '@teambit/config-store';\nimport { ConfigStoreAspect } from '@teambit/config-store';\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\nconst HTTPS: string = 'https://';\n\nexport type OnSuccessLogin = ({\n username,\n token,\n npmrcUpdateResult,\n updatedConfigs,\n}: {\n username?: string;\n token?: string;\n npmrcUpdateResult?: NpmConfigUpdateResult;\n updatedConfigs?: Record<string, string | undefined>;\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 configStore: ConfigStoreMain,\n public onSuccessLoginSlot: OnSuccessLoginSlot\n ) {}\n\n getNpmConfig(): Record<string, string> {\n try {\n const output = execFileSync('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 if (!authToken) {\n throw new Error('user is not logged in');\n }\n const currentUser = await this.getCurrentUser();\n let username = currentUser?.username;\n if (!username) {\n this.logger.warn('failed to fetch username from cloud for the current user. falling back to the global config.');\n username = this.getUsername();\n }\n if (!username) {\n throw new Error('username is not found in the global config or the cloud. please login first.');\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 // Single source of truth for the npm config entries, so conflict detection, the returned\n // `configUpdates` string, and the actual `npm config set` argv can never drift apart.\n const configEntries: [string, string][] = [\n ...allOrgs.map((org): [string, string] => [`@${org}:registry`, registryUrlStr]),\n [`//${registryUrl.host}/:_authToken`, authToken],\n ];\n const configUpdates = configEntries.map(([key, value]) => `${key}=\"${value}\"`).join('\\n');\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 // Pass each key=value as a separate argv element via execFileSync (no shell), so an\n // attacker-controlled org/username (e.g. from the login callback's query string) can never\n // be interpreted as shell syntax. The quotes in `configUpdates` are only needed for shell\n // parsing, so the argv values are unquoted — npm receives the literal value.\n const npmConfigArgs = ['config', 'set', ...configEntries.map(([key, value]) => `${key}=${value}`)];\n execFileSync('npm', npmConfigArgs, { stdio: 'ignore' });\n\n return { configUpdates };\n }\n\n setupAuthListener({\n port: portFromParams,\n clientId = v4(),\n skipConfigUpdate,\n cloudDomain,\n }: {\n port?: number;\n clientId?: string;\n skipConfigUpdate?: boolean;\n cloudDomain?: 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 // eslint-disable-next-line @typescript-eslint/no-misused-promises\n expressApp.get('/', async (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 await this.configStore.setConfig(CFG_USER_TOKEN_KEY, token);\n if (username) await this.configStore.setConfig(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 const updatedConfigs = await this.updateGlobalConfigOnLogin(cloudDomain);\n\n if (!skipConfigUpdate) {\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: configUpdates, updatedConfigs })\n );\n })\n .catch((error) => {\n onLoggedInFns.forEach((fn) =>\n fn({\n username,\n token: token as string,\n updatedConfigs,\n npmrcUpdateResult: {\n error: new Error(`failed to update npmrc. error ${error?.toString}`),\n },\n })\n );\n });\n } else {\n onLoggedInFns.forEach((fn) => fn({ username, token: token as string }));\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 async isLoggedIn(): Promise<boolean> {\n const currentUser = await this.getCurrentUser();\n return Boolean(currentUser);\n }\n\n getAuthToken() {\n const processToken = globalFlags.token;\n const token = processToken || this.configStore.getConfig(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.configStore.getConfig(CFG_USER_NAME_KEY);\n }\n\n private ensureHttps(url: string): string {\n if (!url.startsWith('http')) {\n return `${HTTPS}${url}`;\n }\n return url;\n }\n\n private calculateLoginDomain(cloudDomain: string) {\n let finalCloudDomain = this.ensureHttps(cloudDomain);\n if (!finalCloudDomain.endsWith('/bit-login')) {\n finalCloudDomain = `${finalCloudDomain}/bit-login`;\n }\n return finalCloudDomain;\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.calculateLoginDomain(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 async logout() {\n await this.configStore.delConfig(CFG_USER_TOKEN_KEY);\n await this.configStore.delConfig(CFG_USER_NAME_KEY);\n }\n\n setRedirectUrl(redirectUrl: string) {\n this.REDIRECT_URL = redirectUrl;\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 private globalConfigsToUpdateOnLogin(domain?: string): Record<string, string | undefined> {\n const currentCloudDomain = this.configStore.getConfig(CFG_CLOUD_DOMAIN_KEY);\n const res = {};\n if (!domain || domain === DEFAULT_CLOUD_DOMAIN) {\n if (currentCloudDomain && currentCloudDomain !== DEFAULT_CLOUD_DOMAIN) {\n res[CFG_CLOUD_DOMAIN_KEY] = '';\n }\n return res;\n }\n if (currentCloudDomain !== domain) {\n res[CFG_CLOUD_DOMAIN_KEY] = domain;\n }\n return res;\n }\n\n private async updateGlobalConfigOnLogin(domain?: string) {\n const configsToUpdate = this.globalConfigsToUpdateOnLogin(domain);\n\n for await (const [key, value] of Object.entries(configsToUpdate)) {\n if (value) {\n await this.configStore.setConfig(key, value);\n } else {\n await this.configStore.delConfig(key);\n }\n }\n // Refresh the config after updating\n clearCachedUrls();\n this.config = CloudMain.calculateConfig();\n return configsToUpdate;\n }\n\n async login(\n port?: string,\n suppressBrowserLaunch?: boolean,\n machineName?: string,\n cloudDomain?: string,\n redirectUrl?: string,\n skipConfigUpdate?: boolean,\n defaultCloudDomain?: boolean\n ): Promise<{\n isAlreadyLoggedIn?: boolean;\n username?: string;\n token?: string;\n npmrcUpdateResult?: NpmConfigUpdateResult;\n globalConfigUpdates?: Record<string, string | undefined>;\n } | null> {\n if (defaultCloudDomain) {\n cloudDomain = DEFAULT_CLOUD_DOMAIN;\n }\n const isLoggedIn = await this.isLoggedIn();\n return new Promise((resolve, reject) => {\n if (isLoggedIn) {\n resolve({\n isAlreadyLoggedIn: true,\n username: this.configStore.getConfig(CFG_USER_NAME_KEY),\n token: this.configStore.getConfig(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 globalConfigUpdates: loggedInParams.updatedConfigs,\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 skipConfigUpdate,\n cloudDomain,\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.getRemoteScopes();\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 const graphqlUrl = `${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 static calculateConfig(): CloudWorkspaceConfig {\n return {\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: getRegistryUrl(),\n cloudExporterUrl: CENTRAL_BIT_HUB_URL,\n cloudHubName: CENTRAL_BIT_HUB_NAME,\n loginPort: CloudMain.DEFAULT_PORT,\n };\n }\n\n static slots = [Slot.withType<OnSuccessLogin>()];\n static dependencies = [\n LoggerAspect,\n GraphqlAspect,\n ExpressAspect,\n WorkspaceAspect,\n ScopeAspect,\n ConfigStoreAspect,\n CLIAspect,\n UIAspect,\n ];\n static runtime = MainRuntime;\n static defaultConfig: CloudWorkspaceConfig = CloudMain.calculateConfig();\n\n static async provider(\n [loggerMain, graphql, express, workspace, scope, configStore, cli, ui]: [\n LoggerMain,\n GraphqlMain,\n ExpressMain,\n Workspace,\n ScopeMain,\n ConfigStoreMain,\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, configStore, 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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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_harmony","data","require","_cli","_uuid","_chalk","_interopRequireDefault","_os","_open","_scopes","_scopes2","_logger","_legacy","_scope","_scope2","_graphql","_workspace","_express","_child_process","_ui","_cloud","_cloud2","_login","_logout","_whoami","_npmrc","_configStore","_CloudMain","e","__esModule","default","ownKeys","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","_toPropertyKey","value","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","HTTPS","CloudMain","constructor","config","logger","express","workspace","scope","configStore","onSuccessLoginSlot","Map","getNpmConfig","output","execFileSync","encoding","JSON","parse","error","Error","generateNpmrc","dryRun","force","authToken","getAuthToken","currentUser","getCurrentUser","username","warn","getUsername","updateNpmConfig","detectConfigConflicts","newConfigs","registryDomain","existingConfigs","conflicts","split","line","key","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","configEntries","host","configUpdates","join","getCloudDomain","npmConfigArgs","stdio","setupAuthListener","port","portFromParams","clientId","v4","skipConfigUpdate","cloudDomain","Promise","resolve","reject","getLoginPort","existingAuthListener","authListenerByPort","get","debug","expressApp","createApp","set","authServer","listen","existing","server","on","err","code","delete","then","catch","req","res","query","clientIdFromReq","redirectUri","usernameFromReq","undefined","token","isArray","status","send","setConfig","CFG_USER_TOKEN_KEY","CFG_USER_NAME_KEY","onLoggedInFns","values","updatedConfigs","updateGlobalConfigOnLogin","fn","npmrcUpdateResult","toString","REDIRECT_URL","redirect","ERROR_RESPONSE","registerOnSuccessLogin","onSuccessLoginFn","register","getCloudHubDomain","cloudHubDomain","getCloudApi","cloudApi","getCloudGraphQL","cloudGraphQL","getLoginDomain","loginDomain","getAnalyticsDomain","analyticsDomain","getCloudExporterUrl","cloudExporterUrl","getHubName","cloudHubName","loginPort","DEFAULT_PORT","isLoggedIn","Boolean","processToken","globalFlags","getConfig","getAuthHeader","Authorization","ensureHttps","url","startsWith","calculateLoginDomain","finalCloudDomain","endsWith","getLoginUrl","redirectUrl","machineName","loginUrl","authListenerForPort","buildLoginUrl","authListener","params","os","hostname","process","platform","encodeURIComponent","logout","delConfig","setRedirectUrl","whoami","globalConfigsToUpdateOnLogin","domain","currentCloudDomain","CFG_CLOUD_DOMAIN_KEY","DEFAULT_CLOUD_DOMAIN","configsToUpdate","entries","clearCachedUrls","calculateConfig","login","suppressBrowserLaunch","defaultCloudDomain","isAlreadyLoggedIn","promptLogin","loggedInParams","globalConfigUpdates","console","log","chalk","yellow","open","getCloudScopes","scopes","remotes","getRemoteScopes","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","DEFAULT_HUB_DOMAIN","getSymphonyUrl","SYMPHONY_GRAPHQL","DEFAULT_ANALYTICS_DOMAIN","CENTRAL_BIT_HUB_URL","CENTRAL_BIT_HUB_NAME","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","ConfigStoreAspect","CLIAspect","UIAspect","MainRuntime","addRuntime"],"sources":["cloud.main.runtime.ts"],"sourcesContent":["import type { SlotRegistry } from '@teambit/harmony';\nimport { Slot } from '@teambit/harmony';\nimport type { CLIMain } from '@teambit/cli';\nimport { CLIAspect, MainRuntime, globalFlags } from '@teambit/cli';\nimport { v4 } from 'uuid';\nimport chalk from 'chalk';\nimport os from 'os';\nimport open from 'open';\nimport type * as http from 'http';\nimport type { Express } from 'express';\nimport type { GetScopesGQLResponse } from '@teambit/cloud.models.cloud-scope';\nimport type { CloudUser, CloudUserAPIResponse } from '@teambit/cloud.models.cloud-user';\nimport { ScopeDescriptor } from '@teambit/scopes.scope-descriptor';\nimport { ScopeID } from '@teambit/scopes.scope-id';\nimport type { Logger, LoggerMain } from '@teambit/logger';\nimport { LoggerAspect } from '@teambit/logger';\nimport {\n getCloudDomain,\n DEFAULT_HUB_DOMAIN,\n getSymphonyUrl,\n SYMPHONY_GRAPHQL,\n getLoginUrl,\n DEFAULT_ANALYTICS_DOMAIN,\n getRegistryUrl,\n clearCachedUrls,\n CENTRAL_BIT_HUB_URL,\n CENTRAL_BIT_HUB_NAME,\n CFG_USER_TOKEN_KEY,\n CFG_USER_NAME_KEY,\n DEFAULT_CLOUD_DOMAIN,\n CFG_CLOUD_DOMAIN_KEY,\n} from '@teambit/legacy.constants';\nimport type { ScopeMain } from '@teambit/scope';\nimport { ScopeAspect } from '@teambit/scope';\nimport { fetchWithAgent as fetch } from '@teambit/scope.network';\nimport type { GraphqlMain } from '@teambit/graphql';\nimport { GraphqlAspect } from '@teambit/graphql';\nimport type { Workspace } from '@teambit/workspace';\nimport { WorkspaceAspect } from '@teambit/workspace';\nimport type { ExpressMain } from '@teambit/express';\nimport { ExpressAspect } from '@teambit/express';\nimport { execFileSync } from 'child_process';\nimport type { UiMain } from '@teambit/ui';\nimport { UIAspect } 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';\nimport type { ConfigStoreMain } from '@teambit/config-store';\nimport { ConfigStoreAspect } from '@teambit/config-store';\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\nconst HTTPS: string = 'https://';\n\nexport type OnSuccessLogin = ({\n username,\n token,\n npmrcUpdateResult,\n updatedConfigs,\n}: {\n username?: string;\n token?: string;\n npmrcUpdateResult?: NpmConfigUpdateResult;\n updatedConfigs?: Record<string, string | undefined>;\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 configStore: ConfigStoreMain,\n public onSuccessLoginSlot: OnSuccessLoginSlot\n ) {}\n\n getNpmConfig(): Record<string, string> {\n try {\n const output = execFileSync('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 if (!authToken) {\n throw new Error('user is not logged in');\n }\n const currentUser = await this.getCurrentUser();\n let username = currentUser?.username;\n if (!username) {\n this.logger.warn('failed to fetch username from cloud for the current user. falling back to the global config.');\n username = this.getUsername();\n }\n if (!username) {\n throw new Error('username is not found in the global config or the cloud. please login first.');\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 // Single source of truth for the npm config entries, so conflict detection, the returned\n // `configUpdates` string, and the actual `npm config set` argv can never drift apart.\n const configEntries: [string, string][] = [\n ...allOrgs.map((org): [string, string] => [`@${org}:registry`, registryUrlStr]),\n [`//${registryUrl.host}/:_authToken`, authToken],\n ];\n const configUpdates = configEntries.map(([key, value]) => `${key}=\"${value}\"`).join('\\n');\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 // Pass each key=value as a separate argv element via execFileSync (no shell), so an\n // attacker-controlled org/username (e.g. from the login callback's query string) can never\n // be interpreted as shell syntax. The quotes in `configUpdates` are only needed for shell\n // parsing, so the argv values are unquoted — npm receives the literal value.\n const npmConfigArgs = ['config', 'set', ...configEntries.map(([key, value]) => `${key}=${value}`)];\n execFileSync('npm', npmConfigArgs, { stdio: 'ignore' });\n\n return { configUpdates };\n }\n\n setupAuthListener({\n port: portFromParams,\n clientId = v4(),\n skipConfigUpdate,\n cloudDomain,\n }: {\n port?: number;\n clientId?: string;\n skipConfigUpdate?: boolean;\n cloudDomain?: 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 // The entry for this port was added optimistically (before listen() ran). listen() just\n // failed, so remove the stale, server-less entry — otherwise getLoginUrl/getLoginPort\n // callers can resolve to a port that has no server behind it.\n this.authListenerByPort.delete(port);\n // Forward clientId/skipConfigUpdate/cloudDomain so the retried listener keeps the same\n // identity and honors the original options (previously they were dropped on the bump).\n // eslint-disable-next-line promise/no-promise-in-callback\n this.setupAuthListener({\n port: port + 1,\n clientId,\n skipConfigUpdate,\n cloudDomain,\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 // eslint-disable-next-line @typescript-eslint/no-misused-promises\n expressApp.get('/', async (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 await this.configStore.setConfig(CFG_USER_TOKEN_KEY, token);\n if (username) await this.configStore.setConfig(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 const updatedConfigs = await this.updateGlobalConfigOnLogin(cloudDomain);\n\n if (!skipConfigUpdate) {\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: configUpdates, updatedConfigs })\n );\n })\n .catch((error) => {\n onLoggedInFns.forEach((fn) =>\n fn({\n username,\n token: token as string,\n updatedConfigs,\n npmrcUpdateResult: {\n error: new Error(`failed to update npmrc. error ${error?.toString}`),\n },\n })\n );\n });\n } else {\n onLoggedInFns.forEach((fn) => fn({ username, token: token as string }));\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 async isLoggedIn(): Promise<boolean> {\n const currentUser = await this.getCurrentUser();\n return Boolean(currentUser);\n }\n\n getAuthToken() {\n const processToken = globalFlags.token;\n const token = processToken || this.configStore.getConfig(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.configStore.getConfig(CFG_USER_NAME_KEY);\n }\n\n private ensureHttps(url: string): string {\n if (!url.startsWith('http')) {\n return `${HTTPS}${url}`;\n }\n return url;\n }\n\n private calculateLoginDomain(cloudDomain: string) {\n let finalCloudDomain = this.ensureHttps(cloudDomain);\n if (!finalCloudDomain.endsWith('/bit-login')) {\n finalCloudDomain = `${finalCloudDomain}/bit-login`;\n }\n return finalCloudDomain;\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.calculateLoginDomain(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 this.buildLoginUrl(loginUrl, authListenerForPort, machineName);\n }\n const authListener = await this.setupAuthListener({ port });\n\n if (!authListener) return null;\n\n return this.buildLoginUrl(loginUrl, authListener, machineName);\n }\n\n /**\n * Build the login url the browser is sent to. Always advertises the port the listener actually\n * bound to — setupAuthListener falls back to the next free port when the requested one is taken,\n * and advertising the requested port would point the browser at a port with no server behind it.\n */\n private buildLoginUrl(loginUrl: string, authListener: CloudAuthListener, machineName?: string): string {\n // Percent-encode every value. deviceName comes from --machine-name or os.hostname(), either of\n // which can contain spaces, '&', '#' or non-ascii characters. encodeURI() is not sufficient —\n // it leaves '&', '#' and '+' intact, so a machine named `home & away #1` would truncate the\n // query string and drop the params that follow it.\n const params: [string, string][] = [\n ['port', String(authListener.port)],\n ['clientId', authListener.clientId ?? ''],\n ['responseType', 'token'],\n ['deviceName', machineName || os.hostname()],\n ['os', process.platform],\n ];\n const query = params.map(([key, value]) => `${key}=${encodeURIComponent(value)}`).join('&');\n return `${loginUrl}?${query}`;\n }\n\n async logout() {\n await this.configStore.delConfig(CFG_USER_TOKEN_KEY);\n await this.configStore.delConfig(CFG_USER_NAME_KEY);\n }\n\n setRedirectUrl(redirectUrl: string) {\n this.REDIRECT_URL = redirectUrl;\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 private globalConfigsToUpdateOnLogin(domain?: string): Record<string, string | undefined> {\n const currentCloudDomain = this.configStore.getConfig(CFG_CLOUD_DOMAIN_KEY);\n const res = {};\n if (!domain || domain === DEFAULT_CLOUD_DOMAIN) {\n if (currentCloudDomain && currentCloudDomain !== DEFAULT_CLOUD_DOMAIN) {\n res[CFG_CLOUD_DOMAIN_KEY] = '';\n }\n return res;\n }\n if (currentCloudDomain !== domain) {\n res[CFG_CLOUD_DOMAIN_KEY] = domain;\n }\n return res;\n }\n\n private async updateGlobalConfigOnLogin(domain?: string) {\n const configsToUpdate = this.globalConfigsToUpdateOnLogin(domain);\n\n for await (const [key, value] of Object.entries(configsToUpdate)) {\n if (value) {\n await this.configStore.setConfig(key, value);\n } else {\n await this.configStore.delConfig(key);\n }\n }\n // Refresh the config after updating\n clearCachedUrls();\n this.config = CloudMain.calculateConfig();\n return configsToUpdate;\n }\n\n async login(\n port?: string,\n suppressBrowserLaunch?: boolean,\n machineName?: string,\n cloudDomain?: string,\n redirectUrl?: string,\n skipConfigUpdate?: boolean,\n defaultCloudDomain?: boolean\n ): Promise<{\n isAlreadyLoggedIn?: boolean;\n username?: string;\n token?: string;\n npmrcUpdateResult?: NpmConfigUpdateResult;\n globalConfigUpdates?: Record<string, string | undefined>;\n } | null> {\n if (defaultCloudDomain) {\n cloudDomain = DEFAULT_CLOUD_DOMAIN;\n }\n const isLoggedIn = await this.isLoggedIn();\n return new Promise((resolve, reject) => {\n if (isLoggedIn) {\n resolve({\n isAlreadyLoggedIn: true,\n username: this.configStore.getConfig(CFG_USER_NAME_KEY),\n token: this.configStore.getConfig(CFG_USER_TOKEN_KEY),\n });\n return;\n }\n\n const promptLogin = async (authListener: CloudAuthListener | null) => {\n this.REDIRECT_URL = redirectUrl;\n this.registerOnSuccessLogin((loggedInParams) => {\n resolve({\n username: loggedInParams.username,\n token: loggedInParams.token,\n npmrcUpdateResult: loggedInParams.npmrcUpdateResult,\n globalConfigUpdates: loggedInParams.updatedConfigs,\n });\n });\n\n const loginUrl = await this.getLoginUrl({\n machineName,\n cloudDomain,\n // Use the port the auth listener actually bound to. When the requested port is already\n // in use, setupAuthListener falls back to the next free port (EADDRINUSE bump); building\n // the URL from the requested port would tell the browser to POST the token to a port with\n // no server behind it, so the token is never received and login hangs (\"locked out\").\n port: authListener?.port !== undefined ? String(authListener.port) : 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 skipConfigUpdate,\n cloudDomain,\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.getRemoteScopes();\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 const graphqlUrl = `${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 static calculateConfig(): CloudWorkspaceConfig {\n return {\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: getRegistryUrl(),\n cloudExporterUrl: CENTRAL_BIT_HUB_URL,\n cloudHubName: CENTRAL_BIT_HUB_NAME,\n loginPort: CloudMain.DEFAULT_PORT,\n };\n }\n\n static slots = [Slot.withType<OnSuccessLogin>()];\n static dependencies = [\n LoggerAspect,\n GraphqlAspect,\n ExpressAspect,\n WorkspaceAspect,\n ScopeAspect,\n ConfigStoreAspect,\n CLIAspect,\n UIAspect,\n ];\n static runtime = MainRuntime;\n static defaultConfig: CloudWorkspaceConfig = CloudMain.calculateConfig();\n\n static async provider(\n [loggerMain, graphql, express, workspace, scope, configStore, cli, ui]: [\n LoggerMain,\n GraphqlMain,\n ExpressMain,\n Workspace,\n ScopeMain,\n ConfigStoreMain,\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, configStore, 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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","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@teambit/cloud",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.1368",
|
|
4
4
|
"homepage": "https://bit.cloud/teambit/cloud/cloud",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"componentId": {
|
|
7
7
|
"scope": "teambit.cloud",
|
|
8
8
|
"name": "cloud",
|
|
9
|
-
"version": "0.0.
|
|
9
|
+
"version": "0.0.1368"
|
|
10
10
|
},
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"graphql-tag": "2.12.1",
|
|
@@ -31,12 +31,12 @@
|
|
|
31
31
|
"@teambit/cloud.ui.user-bar": "0.0.56",
|
|
32
32
|
"@teambit/design.controls.menu": "0.0.1",
|
|
33
33
|
"@teambit/bit-error": "0.0.404",
|
|
34
|
-
"@teambit/graphql": "1.0.
|
|
35
|
-
"@teambit/scope": "1.0.
|
|
36
|
-
"@teambit/ui": "1.0.
|
|
37
|
-
"@teambit/workspace": "1.0.
|
|
38
|
-
"@teambit/component": "1.0.
|
|
39
|
-
"@teambit/lanes": "1.0.
|
|
34
|
+
"@teambit/graphql": "1.0.1070",
|
|
35
|
+
"@teambit/scope": "1.0.1070",
|
|
36
|
+
"@teambit/ui": "1.0.1070",
|
|
37
|
+
"@teambit/workspace": "1.0.1070",
|
|
38
|
+
"@teambit/component": "1.0.1070",
|
|
39
|
+
"@teambit/lanes": "1.0.1090"
|
|
40
40
|
},
|
|
41
41
|
"devDependencies": {
|
|
42
42
|
"@types/express": "^4.17.21",
|
|
File without changes
|