@teambit/api-server 1.0.1023 → 1.0.1025

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.
@@ -226,7 +226,7 @@ export declare class APIForIDE {
226
226
  getLaneDiffForIDE(): Promise<LaneDiffForIDEResult>;
227
227
  private toLaneDiffForIDEResult;
228
228
  getCurrentLaneName(includeScope?: boolean): string;
229
- tagOrSnap(message?: string): Promise<import("@teambit/snapping").SnapResults | import("@teambit/snapping").TagResults | null>;
229
+ tagOrSnap(message?: string): Promise<import("@teambit/snapping").TagResults | import("@teambit/snapping").SnapResults | null>;
230
230
  tag(message?: string): Promise<string[]>;
231
231
  snap(message?: string): Promise<string[]>;
232
232
  getCompDetails(id: string, includeSchema?: boolean): Promise<Record<string, any>>;
@@ -58,6 +58,14 @@ export declare class ApiServerMain {
58
58
  * The server already listens on 127.0.0.1 only, so any request reaching us
59
59
  * arrived via loopback. The remaining concern is the *named* origin the
60
60
  * browser thinks it's talking to.
61
+ *
62
+ * Disabled when `BIT_SERVER_HOST` resolves to a non-loopback address,
63
+ * since by definition the server is then reachable via a hostname we
64
+ * can't enumerate ahead of time (e.g. a cloud-workspace hostname). In
65
+ * that mode the bearer token is the primary line of defense; the
66
+ * unauthenticated exemptions (`OPTIONS` preflight and `/api/_health`)
67
+ * become reachable from the network — `/api/_health` is a tiny "ok"
68
+ * liveness probe and intentionally exposed.
61
69
  */
62
70
  private createHostCheckMiddleware;
63
71
  /**
@@ -340,6 +340,10 @@ class ApiServerMain {
340
340
  compile: options.compile
341
341
  });
342
342
  const port = options.port || (await this.getRandomPort());
343
+ const {
344
+ bindHost,
345
+ isOverride
346
+ } = resolveBindHost();
343
347
 
344
348
  // Generate a per-server auth token and persist it to a 0600 file before
345
349
  // any HTTP request can be handled. Clients (e.g. the bit-vscode extension)
@@ -355,7 +359,9 @@ class ApiServerMain {
355
359
  // The host-check middleware runs first to reject DNS-rebinding attacks
356
360
  // (where a malicious page resolves attacker.example to 127.0.0.1).
357
361
  const app = (0, _express().default)();
358
- app.use(this.createHostCheckMiddleware());
362
+ app.use(this.createHostCheckMiddleware({
363
+ loopbackOnly: !isOverride
364
+ }));
359
365
  app.use((0, _cors().default)({
360
366
  origin(origin, callback) {
361
367
  callback(null, true);
@@ -425,10 +431,10 @@ class ApiServerMain {
425
431
  ws: true,
426
432
  changeOrigin: true
427
433
  }));
428
-
429
- // Bind to loopback only never accept connections from the LAN. Clients
430
- // are expected to use 127.0.0.1 (or localhost, which resolves to it).
431
- const server = await app.listen(port, '127.0.0.1');
434
+ if (isOverride) {
435
+ this.logger.debug(`api-server: binding to ${bindHost} (from BIT_SERVER_HOST), loopback Host-header check disabled`);
436
+ }
437
+ const server = await app.listen(port, bindHost);
432
438
  return new Promise((resolve, reject) => {
433
439
  server.on('error', err => {
434
440
  reject(err);
@@ -490,10 +496,21 @@ class ApiServerMain {
490
496
  * The server already listens on 127.0.0.1 only, so any request reaching us
491
497
  * arrived via loopback. The remaining concern is the *named* origin the
492
498
  * browser thinks it's talking to.
499
+ *
500
+ * Disabled when `BIT_SERVER_HOST` resolves to a non-loopback address,
501
+ * since by definition the server is then reachable via a hostname we
502
+ * can't enumerate ahead of time (e.g. a cloud-workspace hostname). In
503
+ * that mode the bearer token is the primary line of defense; the
504
+ * unauthenticated exemptions (`OPTIONS` preflight and `/api/_health`)
505
+ * become reachable from the network — `/api/_health` is a tiny "ok"
506
+ * liveness probe and intentionally exposed.
493
507
  */
494
- createHostCheckMiddleware() {
508
+ createHostCheckMiddleware({
509
+ loopbackOnly
510
+ }) {
495
511
  const allowed = new Set(['localhost', '127.0.0.1', '::1']);
496
512
  return (req, res, next) => {
513
+ if (!loopbackOnly) return next();
497
514
  const hostHeader = req.headers.host || '';
498
515
  // Parse hostname from "host:port". IPv6 may be bracketed: "[::1]:1234"
499
516
  // → "::1"; IPv4 / hostname is plain: "127.0.0.1:1234" → "127.0.0.1".
@@ -657,6 +674,24 @@ exports.ApiServerMain = ApiServerMain;
657
674
  _defineProperty(ApiServerMain, "dependencies", [_cli().CLIAspect, _workspace().WorkspaceAspect, _logger().LoggerAspect, _express2().ExpressAspect, _watcher().WatcherAspect, _snapping().SnappingAspect, _lanes().LanesAspect, _install().InstallAspect, _export().ExportAspect, _checkout().CheckoutAspect, _componentLog().ComponentLogAspect, _importer().ImporterAspect, _componentCompare().ComponentCompareAspect, _generator().GeneratorAspect, _remove().RemoveAspect, _config().ConfigAspect, _application().ApplicationAspect, _deprecation().DeprecationAspect, _envs().EnvsAspect, _graph().GraphAspect, _scope2().ScopeAspect, _component().ComponentAspect, _schema().SchemaAspect]);
658
675
  _defineProperty(ApiServerMain, "runtime", _cli().MainRuntime);
659
676
  _apiServer().ApiServerAspect.addRuntime(ApiServerMain);
677
+ const LOOPBACK_HOSTS = new Set(['127.0.0.1', 'localhost', '::1']);
678
+
679
+ /**
680
+ * Resolve the api-server bind host from `BIT_SERVER_HOST`, falling back to
681
+ * loopback. `isOverride` is the single source of truth for "is the server
682
+ * reachable from outside loopback?" — used both to choose the bind address
683
+ * and to disable the loopback Host-header check. Derived from the *resolved*
684
+ * host (not env presence) so `BIT_SERVER_HOST=127.0.0.1` and whitespace-only
685
+ * values don't silently weaken the DNS-rebinding mitigation.
686
+ */
687
+ function resolveBindHost() {
688
+ const override = process.env.BIT_SERVER_HOST?.trim();
689
+ const bindHost = override || '127.0.0.1';
690
+ return {
691
+ bindHost,
692
+ isOverride: !LOOPBACK_HOSTS.has(bindHost.toLowerCase())
693
+ };
694
+ }
660
695
 
661
696
  /**
662
697
  * Extract the token from an `Authorization: Bearer <token>` header.
@@ -1 +1 @@
1
- {"version":3,"names":["_cli","data","require","_toolboxNetwork","_fsExtra","_interopRequireDefault","_crypto","_express","_express2","_logger","_lanes","_remove","_snapping","_generator","_componentCompare","_componentLog","_watcher","_config","_export","_checkout","_install","_importer","_component","_workspace","_harmonyModules","_cors","_httpProxyMiddleware","_apiServer","_cli2","_server","_ide","_apiForIde","_sseEvents","_path","_child_process","_cliRaw","_application","_deprecation","_envs","_scope","_legacy","_graph","_scope2","_schema","e","__esModule","default","_defineProperty","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","ApiServerMain","constructor","workspace","logger","express","watcher","installer","importer","runApiServer","options","Error","process","cwd","registerOnComponentChange","component","files","removedFiles","sendEventsToClients","id","toStringWithoutVersion","registerOnBitmapChange","lastModifiedTimestamp","bitMap","getLastModifiedBitmapThroughBit","secondsPassedSinceLastModified","Date","now","debug","importCurrentObjects","registerOnWorkspaceConfigChange","scope","registerOnPostExport","registerPostInstall","watch","preCompile","compile","port","getRandomPort","writeServerToken","app","expressFactory","use","createHostCheckMiddleware","cors","origin","callback","credentials","createAuthMiddleware","createApp","proxyHeaders","Authorization","DEFAULT_AUTH_TYPE","Http","getToken","symphonyUrl","getSymphonyUrl","createProxyMiddleware","target","changeOrigin","headers","on","error","err","req","res","writeHead","end","proxyReq","fixRequestBody","proxyRes","proxyReqWs","entries","forEach","key","setHeader","pathFilter","ws","server","listen","Promise","resolve","reject","consoleSuccess","writeUsedPort","startParentProcessMonitor","filePath","getServerPortFilePath","fs","writeFileSync","toString","mode","chmodSync","token","crypto","randomBytes","getServerTokenFilePath","serverToken","join","path","allowed","Set","next","hostHeader","host","match","toLowerCase","has","status","method","provided","parseBearerToken","authorization","authorized","queryIdx","url","indexOf","params","URLSearchParams","slice","get","delete","remaining","jsonp","message","originalPpid","ppid","parentInfo","getProcessInfo","pid","platform","checkInterval","intervalId","setInterval","currentPpid","clearInterval","exit","unref","psCommand","output","execSync","encoding","timeout","trim","startingPort","randomNumber","randomInt","Port","getPort","getExistingUsedPort","fileContent","readFile","parseInt","code","undefined","provider","cli","loggerMain","snapping","lanes","exporter","checkout","componentLog","componentCompare","generator","remove","config","application","deprecation","envs","graph","schema","createLogger","ApiServerAspect","apiServer","register","ServerCmd","apiForIDE","APIForIDE","cliRoute","CLIRoute","cliRawRoute","CLIRawRoute","ideRoute","IDERoute","sseEventsRoute","SSEEventsRoute","exports","CLIAspect","WorkspaceAspect","LoggerAspect","ExpressAspect","WatcherAspect","SnappingAspect","LanesAspect","InstallAspect","ExportAspect","CheckoutAspect","ComponentLogAspect","ImporterAspect","ComponentCompareAspect","GeneratorAspect","RemoveAspect","ConfigAspect","ApplicationAspect","DeprecationAspect","EnvsAspect","GraphAspect","ScopeAspect","ComponentAspect","SchemaAspect","MainRuntime","addRuntime","header","_default"],"sources":["api-server.main.runtime.ts"],"sourcesContent":["import type { CLIMain } from '@teambit/cli';\nimport { CLIAspect, MainRuntime } from '@teambit/cli';\nimport { Port } from '@teambit/toolbox.network.get-port';\nimport fs from 'fs-extra';\nimport crypto from 'crypto';\nimport expressFactory from 'express';\nimport type { ExpressMain, Middleware, Request, Response, NextFunction } from '@teambit/express';\nimport { ExpressAspect } from '@teambit/express';\nimport type { Logger, LoggerMain } from '@teambit/logger';\nimport { LoggerAspect } from '@teambit/logger';\nimport type { LanesMain } from '@teambit/lanes';\nimport { LanesAspect } from '@teambit/lanes';\nimport type { RemoveMain } from '@teambit/remove';\nimport { RemoveAspect } from '@teambit/remove';\nimport type { SnappingMain } from '@teambit/snapping';\nimport { SnappingAspect } from '@teambit/snapping';\nimport type { GeneratorMain } from '@teambit/generator';\nimport { GeneratorAspect } from '@teambit/generator';\nimport type { ComponentCompareMain } from '@teambit/component-compare';\nimport { ComponentCompareAspect } from '@teambit/component-compare';\nimport type { ComponentLogMain } from '@teambit/component-log';\nimport { ComponentLogAspect } from '@teambit/component-log';\nimport type { WatcherMain } from '@teambit/watcher';\nimport { WatcherAspect } from '@teambit/watcher';\nimport type { ConfigMain } from '@teambit/config';\nimport { ConfigAspect } from '@teambit/config';\nimport type { ExportMain } from '@teambit/export';\nimport { ExportAspect } from '@teambit/export';\nimport type { CheckoutMain } from '@teambit/checkout';\nimport { CheckoutAspect } from '@teambit/checkout';\nimport type { InstallMain } from '@teambit/install';\nimport { InstallAspect } from '@teambit/install';\nimport type { ImporterMain } from '@teambit/importer';\nimport { ImporterAspect } from '@teambit/importer';\nimport type { Component, ComponentMain } from '@teambit/component';\nimport { ComponentAspect } from '@teambit/component';\nimport type { Workspace } from '@teambit/workspace';\nimport { WorkspaceAspect } from '@teambit/workspace';\nimport { sendEventsToClients } from '@teambit/harmony.modules.send-server-sent-events';\nimport cors from 'cors';\nimport { createProxyMiddleware, fixRequestBody } from 'http-proxy-middleware';\nimport { ApiServerAspect } from './api-server.aspect';\nimport { CLIRoute } from './cli.route';\nimport { ServerCmd } from './server.cmd';\nimport { IDERoute } from './ide.route';\nimport { APIForIDE } from './api-for-ide';\nimport { SSEEventsRoute } from './sse-events.route';\nimport { join } from 'path';\nimport { execSync } from 'child_process';\nimport { CLIRawRoute } from './cli-raw.route';\nimport type { ApplicationMain } from '@teambit/application';\nimport { ApplicationAspect } from '@teambit/application';\nimport type { DeprecationMain } from '@teambit/deprecation';\nimport { DeprecationAspect } from '@teambit/deprecation';\nimport type { EnvsMain } from '@teambit/envs';\nimport { EnvsAspect } from '@teambit/envs';\nimport { DEFAULT_AUTH_TYPE, Http } from '@teambit/scope.network';\nimport { getSymphonyUrl } from '@teambit/legacy.constants';\nimport type { GraphMain } from '@teambit/graph';\nimport { GraphAspect } from '@teambit/graph';\nimport type { ScopeMain } from '@teambit/scope';\nimport { ScopeAspect } from '@teambit/scope';\nimport type { SchemaMain } from '@teambit/schema';\nimport { SchemaAspect } from '@teambit/schema';\n\nexport class ApiServerMain {\n private serverToken?: string;\n\n constructor(\n private workspace: Workspace,\n private logger: Logger,\n private express: ExpressMain,\n private watcher: WatcherMain,\n private installer: InstallMain,\n private importer: ImporterMain\n ) {}\n\n async runApiServer(options: { port: number; compile: boolean }) {\n if (!this.workspace) {\n throw new Error(`unable to run bit-server, the current directory ${process.cwd()} is not a workspace`);\n }\n\n this.workspace.registerOnComponentChange(\n async (\n component: Component,\n files: string[], // os absolute paths\n removedFiles?: string[] // os absolute paths\n ) => {\n sendEventsToClients('onComponentChange', {\n id: component.id.toStringWithoutVersion(),\n files,\n removedFiles,\n });\n }\n );\n\n this.workspace.registerOnBitmapChange(async () => {\n const lastModifiedTimestamp = await this.workspace.bitMap.getLastModifiedBitmapThroughBit();\n const secondsPassedSinceLastModified = lastModifiedTimestamp && (Date.now() - lastModifiedTimestamp) / 1000;\n if (secondsPassedSinceLastModified && secondsPassedSinceLastModified > 1) {\n // changes by bit were done more than a second ago, so probably this .bitmap change was done by \"git pull\"\n this.logger.debug(\n `running import because we assume the .bitmap file has changed due to \"git pull\", last time it was modified by bit was ${secondsPassedSinceLastModified} seconds ago`\n );\n await this.importer.importCurrentObjects();\n }\n sendEventsToClients('onBitmapChange', {});\n });\n\n this.workspace.registerOnWorkspaceConfigChange(async () => {\n sendEventsToClients('onWorkspaceConfigChange', {});\n });\n\n this.workspace.scope.registerOnPostExport(async () => {\n sendEventsToClients('onPostExport', {});\n });\n\n this.installer.registerPostInstall(async () => {\n sendEventsToClients('onPostInstall', {});\n });\n\n await this.watcher.watch({\n preCompile: false,\n compile: options.compile,\n });\n\n const port = options.port || (await this.getRandomPort());\n\n // Generate a per-server auth token and persist it to a 0600 file before\n // any HTTP request can be handled. Clients (e.g. the bit-vscode extension)\n // read it from <workspace.scope.path>/server-token.txt and send it as\n // `Authorization: Bearer <token>`. See createAuthMiddleware below.\n this.writeServerToken();\n\n // Create the app *before* express.createApp registers routes, so the auth\n // middleware runs before bodyParser — unauthenticated requests can't\n // trigger large-body parsing. CORS is registered before auth so 401\n // responses still carry CORS headers; otherwise browser-based clients\n // (bit-vscode) see a misleading CORS failure instead of the JSON 401.\n // The host-check middleware runs first to reject DNS-rebinding attacks\n // (where a malicious page resolves attacker.example to 127.0.0.1).\n const app = expressFactory();\n app.use(this.createHostCheckMiddleware());\n app.use(\n cors({\n origin(origin, callback) {\n callback(null, true);\n },\n credentials: true,\n })\n );\n app.use(this.createAuthMiddleware());\n this.express.createApp(app);\n const proxyHeaders = {\n Authorization: `${DEFAULT_AUTH_TYPE} ${Http.getToken()}`,\n origin: '',\n 'user-agent': 'bit-vscode-proxy',\n };\n const symphonyUrl = getSymphonyUrl();\n app.use(\n '/api/cloud-graphql',\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n createProxyMiddleware({\n target: `${symphonyUrl}/graphql`,\n changeOrigin: true,\n headers: proxyHeaders,\n on: {\n error: (err, req, res) => {\n this.logger.error('graphql cloud proxy error', err);\n // @ts-ignore\n res.writeHead(500, {\n 'Content-Type': 'text/plain',\n });\n res.end('Something went wrong with the proxy server of bit cloud graphql');\n },\n proxyReq: fixRequestBody,\n },\n })\n );\n\n app.use(\n '/api/cloud-rest',\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n createProxyMiddleware({\n target: `${symphonyUrl}`,\n changeOrigin: true,\n headers: proxyHeaders,\n on: {\n proxyRes: (proxyRes) => {\n proxyRes.headers['Access-Control-Allow-Credentials'] = 'true';\n },\n error: (err, req, res) => {\n this.logger.error('rest cloud proxy error', err);\n // @ts-ignore\n res.writeHead(500, {\n 'Content-Type': 'text/plain',\n });\n res.end('Something went wrong with the proxy server of bit cloud rest');\n },\n proxyReq: fixRequestBody,\n },\n })\n );\n\n app.use(\n '/websocket-server/subscriptions',\n createProxyMiddleware({\n on: {\n proxyReqWs: (proxyReq) => {\n Object.entries(proxyHeaders).forEach(([key, value]) => {\n proxyReq.setHeader(key, value);\n });\n },\n error: (err) => {\n this.logger.error('websocket cloud proxy error', err);\n },\n },\n pathFilter: '/',\n target: symphonyUrl,\n ws: true,\n changeOrigin: true,\n })\n );\n\n // Bind to loopback only — never accept connections from the LAN. Clients\n // are expected to use 127.0.0.1 (or localhost, which resolves to it).\n const server = await app.listen(port, '127.0.0.1');\n\n return new Promise((resolve, reject) => {\n server.on('error', (err) => {\n reject(err);\n });\n server.on('listening', () => {\n // important! if you change the message here, change it also in server-forever.ts and also in the vscode extension.\n this.logger.consoleSuccess(`Bit Server is listening on port ${port}`);\n this.writeUsedPort(port);\n this.startParentProcessMonitor();\n resolve(port);\n });\n });\n }\n\n writeUsedPort(port: number) {\n const filePath = this.getServerPortFilePath();\n fs.writeFileSync(filePath, port.toString(), { mode: 0o600 });\n // Node's `mode` write option is only honored when the file is created.\n // chmod explicitly so a pre-existing file with broader permissions gets\n // tightened to 0600.\n fs.chmodSync(filePath, 0o600);\n }\n\n /**\n * Generate a fresh per-server bearer token and persist it to a 0600 file.\n * Clients (e.g. the bit-vscode extension) read this file and send the token\n * as `Authorization: Bearer <token>` on every request.\n *\n * Backwards compatibility: clients that don't yet know about this file (older\n * extension versions) won't send the header and will receive 401 with a\n * message pointing them at the upgrade. Old bit-server versions don't write\n * this file, so a new client checking for it gracefully falls back to no\n * auth header — meaning a NEW extension keeps working against an OLD\n * bit-server.\n */\n private writeServerToken() {\n const token = crypto.randomBytes(32).toString('hex');\n const filePath = this.getServerTokenFilePath();\n fs.writeFileSync(filePath, token, { mode: 0o600 });\n // Node's `mode` write option is only honored when the file is created.\n // chmod explicitly so a pre-existing file with broader permissions gets\n // tightened to 0600.\n fs.chmodSync(filePath, 0o600);\n this.serverToken = token;\n }\n\n private getServerTokenFilePath() {\n return join(this.workspace.scope.path, 'server-token.txt');\n }\n\n /**\n * Host-header check: only accept requests targeting a loopback hostname.\n * Defends against DNS-rebinding attacks where a malicious page on\n * `evil.example` flips DNS to 127.0.0.1 — the browser sends `Host:\n * evil.example`, which we reject with 403 here.\n *\n * The server already listens on 127.0.0.1 only, so any request reaching us\n * arrived via loopback. The remaining concern is the *named* origin the\n * browser thinks it's talking to.\n */\n private createHostCheckMiddleware(): Middleware {\n const allowed = new Set(['localhost', '127.0.0.1', '::1']);\n return (req: Request, res: Response, next: NextFunction) => {\n const hostHeader = req.headers.host || '';\n // Parse hostname from \"host:port\". IPv6 may be bracketed: \"[::1]:1234\"\n // → \"::1\"; IPv4 / hostname is plain: \"127.0.0.1:1234\" → \"127.0.0.1\".\n // HTTP hostnames are case-insensitive, so normalize before checking.\n const match = hostHeader.match(/^\\[([^\\]]+)\\]|^([^:]+)/);\n const host = match ? (match[1] || match[2]).toLowerCase() : '';\n if (!allowed.has(host)) {\n this.logger.debug(`api-server: rejected non-loopback Host header: ${hostHeader}`);\n res.status(403).end();\n return;\n }\n return next();\n };\n }\n\n /**\n * Authentication middleware: requires `Authorization: Bearer <serverToken>`\n * on every request except OPTIONS preflight (handled by cors) and the\n * unauthenticated `/api/_health` liveness probe.\n *\n * GET requests can also authenticate via a `?token=...` query parameter,\n * since browser-native WebSocket and EventSource cannot set custom headers\n * from JavaScript. The param is stripped from `req.url` before downstream\n * handling so the proxy and logs never see it.\n *\n * Runs before bodyParser so unauthenticated requests can't trigger\n * large-body parsing.\n */\n private createAuthMiddleware(): Middleware {\n return (req: Request, res: Response, next: NextFunction) => {\n if (req.method === 'OPTIONS') return next();\n // Use req.path (not req.url) so query strings don't bypass the\n // health-check exemption — e.g. /api/_health?cache-buster=1.\n if (req.path === '/api/_health') return next();\n\n const provided = parseBearerToken(req.headers.authorization);\n let authorized = !!this.serverToken && provided === this.serverToken;\n\n if (!authorized && this.serverToken && req.method === 'GET') {\n const queryIdx = req.url.indexOf('?');\n if (queryIdx >= 0) {\n const params = new URLSearchParams(req.url.slice(queryIdx + 1));\n if (params.get('token') === this.serverToken) {\n authorized = true;\n params.delete('token');\n const remaining = params.toString();\n req.url = req.url.slice(0, queryIdx) + (remaining ? `?${remaining}` : '');\n }\n }\n }\n\n if (!authorized) {\n this.logger.debug(`api-server: rejected unauthenticated request to ${req.path}`);\n res.status(401).jsonp({\n error: 'unauthorized',\n message:\n 'This bit-server requires authentication. Please upgrade your bit VS Code extension to the latest version.',\n });\n return;\n }\n return next();\n };\n }\n\n /**\n * Monitor the parent process (typically VSCode) and shut down if it dies.\n *\n * On Unix-like systems (macOS, Linux), when a parent process dies, orphaned children are\n * re-parented to PID 1 (init/launchd). By watching for `process.ppid` changing from\n * the original value to 1, we can detect that the parent exited and proactively\n * shut down the bit server to avoid leaving stale background processes running.\n *\n * Note: This orphan detection does not work on Windows, as Windows does not re-parent\n * processes to PID 1. On Windows, this method only logs the parent process info at startup.\n */\n private startParentProcessMonitor() {\n const originalPpid = process.ppid;\n\n // Log parent process info at startup\n const parentInfo = this.getProcessInfo(originalPpid);\n this.logger.debug(\n `bit server started. PID: ${process.pid}, Parent PID: ${originalPpid}, Parent command: ${parentInfo}`\n );\n\n // Skip orphan detection on Windows - PPID doesn't change to 1 when parent dies\n if (process.platform === 'win32') {\n return;\n }\n\n const checkInterval = 5000; // Check every 5 seconds\n const intervalId = setInterval(() => {\n const currentPpid = process.ppid;\n // If PPID changed to 1, our parent (e.g., VSCode) died and we were re-parented to init\n if (currentPpid === 1 && originalPpid !== 1) {\n this.logger.debug(\n `Parent process died (was PID ${originalPpid}: ${parentInfo}). Current PPID is now 1 (init/launchd). Shutting down bit server.`\n );\n clearInterval(intervalId);\n process.exit(0);\n }\n }, checkInterval);\n\n // Don't let this interval keep the process alive if everything else is done\n intervalId.unref();\n }\n\n /**\n * Get the command/path of a process by its PID.\n */\n private getProcessInfo(pid: number): string {\n try {\n if (process.platform === 'win32') {\n // Windows: use PowerShell Get-CimInstance (WMIC is deprecated/removed on modern Windows)\n const psCommand = `Get-CimInstance Win32_Process -Filter 'ProcessId = ${pid}' | Select-Object -ExpandProperty CommandLine`;\n const output = execSync(`powershell.exe -NoProfile -Command \"${psCommand}\"`, {\n encoding: 'utf8',\n timeout: 2000,\n });\n return output.trim() || 'unknown';\n } else {\n // macOS/Linux: use ps\n const output = execSync(`ps -o command= -p ${pid}`, { encoding: 'utf8', timeout: 2000 });\n return output.trim() || 'unknown';\n }\n } catch {\n return 'unknown (process may have exited)';\n }\n }\n\n async getRandomPort() {\n const startingPort = 4000; // we prefer to have the ports between 4000 and 4999.\n const randomNumber = crypto.randomInt(startingPort, 5000);\n const port = await Port.getPort(randomNumber, 65500);\n return port;\n }\n\n async getExistingUsedPort(): Promise<number | undefined> {\n const filePath = this.getServerPortFilePath();\n try {\n const fileContent = await fs.readFile(filePath, 'utf8');\n return parseInt(fileContent, 10);\n } catch (err: any) {\n if (err.code === 'ENOENT') {\n return undefined;\n }\n throw err;\n }\n }\n\n private getServerPortFilePath() {\n return join(this.workspace.scope.path, 'server-port.txt');\n }\n\n static dependencies = [\n CLIAspect,\n WorkspaceAspect,\n LoggerAspect,\n ExpressAspect,\n WatcherAspect,\n SnappingAspect,\n LanesAspect,\n InstallAspect,\n ExportAspect,\n CheckoutAspect,\n ComponentLogAspect,\n ImporterAspect,\n ComponentCompareAspect,\n GeneratorAspect,\n RemoveAspect,\n ConfigAspect,\n ApplicationAspect,\n DeprecationAspect,\n EnvsAspect,\n GraphAspect,\n ScopeAspect,\n ComponentAspect,\n SchemaAspect,\n ];\n static runtime = MainRuntime;\n static async provider([\n cli,\n workspace,\n loggerMain,\n express,\n watcher,\n snapping,\n lanes,\n installer,\n exporter,\n checkout,\n componentLog,\n importer,\n componentCompare,\n generator,\n remove,\n config,\n application,\n deprecation,\n envs,\n graph,\n scope,\n component,\n schema,\n ]: [\n CLIMain,\n Workspace,\n LoggerMain,\n ExpressMain,\n WatcherMain,\n SnappingMain,\n LanesMain,\n InstallMain,\n ExportMain,\n CheckoutMain,\n ComponentLogMain,\n ImporterMain,\n ComponentCompareMain,\n GeneratorMain,\n RemoveMain,\n ConfigMain,\n ApplicationMain,\n DeprecationMain,\n EnvsMain,\n GraphMain,\n ScopeMain,\n ComponentMain,\n SchemaMain,\n ]) {\n const logger = loggerMain.createLogger(ApiServerAspect.id);\n const apiServer = new ApiServerMain(workspace, logger, express, watcher, installer, importer);\n cli.register(new ServerCmd(apiServer));\n\n const apiForIDE = new APIForIDE(\n workspace,\n snapping,\n lanes,\n installer,\n exporter,\n checkout,\n componentLog,\n componentCompare,\n generator,\n remove,\n config,\n application,\n deprecation,\n envs,\n graph,\n scope,\n component,\n schema,\n logger\n );\n const cliRoute = new CLIRoute(logger, cli, apiForIDE);\n const cliRawRoute = new CLIRawRoute(logger, cli, apiForIDE);\n const ideRoute = new IDERoute(logger, apiForIDE);\n const sseEventsRoute = new SSEEventsRoute(logger, cli);\n // register only when the workspace is available. don't register this on a remote-scope, for security reasons.\n if (workspace) {\n express.register([cliRoute, cliRawRoute, ideRoute, sseEventsRoute]);\n }\n\n return apiServer;\n }\n}\n\nApiServerAspect.addRuntime(ApiServerMain);\n\n/**\n * Extract the token from an `Authorization: Bearer <token>` header.\n * Lenient on scheme casing and surrounding whitespace so a slightly\n * non-canonical client header doesn't get rejected.\n */\nfunction parseBearerToken(header: string | undefined): string | undefined {\n if (!header) return undefined;\n const match = header.match(/^\\s*Bearer\\s+(\\S+)\\s*$/i);\n return match?.[1];\n}\n\nexport default ApiServerMain;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_cli","data","require","_toolboxNetwork","_fsExtra","_interopRequireDefault","_crypto","_express","_express2","_logger","_lanes","_remove","_snapping","_generator","_componentCompare","_componentLog","_watcher","_config","_export","_checkout","_install","_importer","_component","_workspace","_harmonyModules","_cors","_httpProxyMiddleware","_apiServer","_cli2","_server","_ide","_apiForIde","_sseEvents","_path","_child_process","_cliRaw","_application","_deprecation","_envs","_scope","_legacy","_graph","_scope2","_schema","e","__esModule","default","_defineProperty","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","ApiServerMain","constructor","workspace","logger","express","watcher","installer","importer","runApiServer","options","Error","process","cwd","registerOnComponentChange","component","files","removedFiles","sendEventsToClients","id","toStringWithoutVersion","registerOnBitmapChange","lastModifiedTimestamp","bitMap","getLastModifiedBitmapThroughBit","secondsPassedSinceLastModified","Date","now","debug","importCurrentObjects","registerOnWorkspaceConfigChange","scope","registerOnPostExport","registerPostInstall","watch","preCompile","compile","port","getRandomPort","bindHost","isOverride","resolveBindHost","writeServerToken","app","expressFactory","use","createHostCheckMiddleware","loopbackOnly","cors","origin","callback","credentials","createAuthMiddleware","createApp","proxyHeaders","Authorization","DEFAULT_AUTH_TYPE","Http","getToken","symphonyUrl","getSymphonyUrl","createProxyMiddleware","target","changeOrigin","headers","on","error","err","req","res","writeHead","end","proxyReq","fixRequestBody","proxyRes","proxyReqWs","entries","forEach","key","setHeader","pathFilter","ws","server","listen","Promise","resolve","reject","consoleSuccess","writeUsedPort","startParentProcessMonitor","filePath","getServerPortFilePath","fs","writeFileSync","toString","mode","chmodSync","token","crypto","randomBytes","getServerTokenFilePath","serverToken","join","path","allowed","Set","next","hostHeader","host","match","toLowerCase","has","status","method","provided","parseBearerToken","authorization","authorized","queryIdx","url","indexOf","params","URLSearchParams","slice","get","delete","remaining","jsonp","message","originalPpid","ppid","parentInfo","getProcessInfo","pid","platform","checkInterval","intervalId","setInterval","currentPpid","clearInterval","exit","unref","psCommand","output","execSync","encoding","timeout","trim","startingPort","randomNumber","randomInt","Port","getPort","getExistingUsedPort","fileContent","readFile","parseInt","code","undefined","provider","cli","loggerMain","snapping","lanes","exporter","checkout","componentLog","componentCompare","generator","remove","config","application","deprecation","envs","graph","schema","createLogger","ApiServerAspect","apiServer","register","ServerCmd","apiForIDE","APIForIDE","cliRoute","CLIRoute","cliRawRoute","CLIRawRoute","ideRoute","IDERoute","sseEventsRoute","SSEEventsRoute","exports","CLIAspect","WorkspaceAspect","LoggerAspect","ExpressAspect","WatcherAspect","SnappingAspect","LanesAspect","InstallAspect","ExportAspect","CheckoutAspect","ComponentLogAspect","ImporterAspect","ComponentCompareAspect","GeneratorAspect","RemoveAspect","ConfigAspect","ApplicationAspect","DeprecationAspect","EnvsAspect","GraphAspect","ScopeAspect","ComponentAspect","SchemaAspect","MainRuntime","addRuntime","LOOPBACK_HOSTS","override","env","BIT_SERVER_HOST","header","_default"],"sources":["api-server.main.runtime.ts"],"sourcesContent":["import type { CLIMain } from '@teambit/cli';\nimport { CLIAspect, MainRuntime } from '@teambit/cli';\nimport { Port } from '@teambit/toolbox.network.get-port';\nimport fs from 'fs-extra';\nimport crypto from 'crypto';\nimport expressFactory from 'express';\nimport type { ExpressMain, Middleware, Request, Response, NextFunction } from '@teambit/express';\nimport { ExpressAspect } from '@teambit/express';\nimport type { Logger, LoggerMain } from '@teambit/logger';\nimport { LoggerAspect } from '@teambit/logger';\nimport type { LanesMain } from '@teambit/lanes';\nimport { LanesAspect } from '@teambit/lanes';\nimport type { RemoveMain } from '@teambit/remove';\nimport { RemoveAspect } from '@teambit/remove';\nimport type { SnappingMain } from '@teambit/snapping';\nimport { SnappingAspect } from '@teambit/snapping';\nimport type { GeneratorMain } from '@teambit/generator';\nimport { GeneratorAspect } from '@teambit/generator';\nimport type { ComponentCompareMain } from '@teambit/component-compare';\nimport { ComponentCompareAspect } from '@teambit/component-compare';\nimport type { ComponentLogMain } from '@teambit/component-log';\nimport { ComponentLogAspect } from '@teambit/component-log';\nimport type { WatcherMain } from '@teambit/watcher';\nimport { WatcherAspect } from '@teambit/watcher';\nimport type { ConfigMain } from '@teambit/config';\nimport { ConfigAspect } from '@teambit/config';\nimport type { ExportMain } from '@teambit/export';\nimport { ExportAspect } from '@teambit/export';\nimport type { CheckoutMain } from '@teambit/checkout';\nimport { CheckoutAspect } from '@teambit/checkout';\nimport type { InstallMain } from '@teambit/install';\nimport { InstallAspect } from '@teambit/install';\nimport type { ImporterMain } from '@teambit/importer';\nimport { ImporterAspect } from '@teambit/importer';\nimport type { Component, ComponentMain } from '@teambit/component';\nimport { ComponentAspect } from '@teambit/component';\nimport type { Workspace } from '@teambit/workspace';\nimport { WorkspaceAspect } from '@teambit/workspace';\nimport { sendEventsToClients } from '@teambit/harmony.modules.send-server-sent-events';\nimport cors from 'cors';\nimport { createProxyMiddleware, fixRequestBody } from 'http-proxy-middleware';\nimport { ApiServerAspect } from './api-server.aspect';\nimport { CLIRoute } from './cli.route';\nimport { ServerCmd } from './server.cmd';\nimport { IDERoute } from './ide.route';\nimport { APIForIDE } from './api-for-ide';\nimport { SSEEventsRoute } from './sse-events.route';\nimport { join } from 'path';\nimport { execSync } from 'child_process';\nimport { CLIRawRoute } from './cli-raw.route';\nimport type { ApplicationMain } from '@teambit/application';\nimport { ApplicationAspect } from '@teambit/application';\nimport type { DeprecationMain } from '@teambit/deprecation';\nimport { DeprecationAspect } from '@teambit/deprecation';\nimport type { EnvsMain } from '@teambit/envs';\nimport { EnvsAspect } from '@teambit/envs';\nimport { DEFAULT_AUTH_TYPE, Http } from '@teambit/scope.network';\nimport { getSymphonyUrl } from '@teambit/legacy.constants';\nimport type { GraphMain } from '@teambit/graph';\nimport { GraphAspect } from '@teambit/graph';\nimport type { ScopeMain } from '@teambit/scope';\nimport { ScopeAspect } from '@teambit/scope';\nimport type { SchemaMain } from '@teambit/schema';\nimport { SchemaAspect } from '@teambit/schema';\n\nexport class ApiServerMain {\n private serverToken?: string;\n\n constructor(\n private workspace: Workspace,\n private logger: Logger,\n private express: ExpressMain,\n private watcher: WatcherMain,\n private installer: InstallMain,\n private importer: ImporterMain\n ) {}\n\n async runApiServer(options: { port: number; compile: boolean }) {\n if (!this.workspace) {\n throw new Error(`unable to run bit-server, the current directory ${process.cwd()} is not a workspace`);\n }\n\n this.workspace.registerOnComponentChange(\n async (\n component: Component,\n files: string[], // os absolute paths\n removedFiles?: string[] // os absolute paths\n ) => {\n sendEventsToClients('onComponentChange', {\n id: component.id.toStringWithoutVersion(),\n files,\n removedFiles,\n });\n }\n );\n\n this.workspace.registerOnBitmapChange(async () => {\n const lastModifiedTimestamp = await this.workspace.bitMap.getLastModifiedBitmapThroughBit();\n const secondsPassedSinceLastModified = lastModifiedTimestamp && (Date.now() - lastModifiedTimestamp) / 1000;\n if (secondsPassedSinceLastModified && secondsPassedSinceLastModified > 1) {\n // changes by bit were done more than a second ago, so probably this .bitmap change was done by \"git pull\"\n this.logger.debug(\n `running import because we assume the .bitmap file has changed due to \"git pull\", last time it was modified by bit was ${secondsPassedSinceLastModified} seconds ago`\n );\n await this.importer.importCurrentObjects();\n }\n sendEventsToClients('onBitmapChange', {});\n });\n\n this.workspace.registerOnWorkspaceConfigChange(async () => {\n sendEventsToClients('onWorkspaceConfigChange', {});\n });\n\n this.workspace.scope.registerOnPostExport(async () => {\n sendEventsToClients('onPostExport', {});\n });\n\n this.installer.registerPostInstall(async () => {\n sendEventsToClients('onPostInstall', {});\n });\n\n await this.watcher.watch({\n preCompile: false,\n compile: options.compile,\n });\n\n const port = options.port || (await this.getRandomPort());\n const { bindHost, isOverride } = resolveBindHost();\n\n // Generate a per-server auth token and persist it to a 0600 file before\n // any HTTP request can be handled. Clients (e.g. the bit-vscode extension)\n // read it from <workspace.scope.path>/server-token.txt and send it as\n // `Authorization: Bearer <token>`. See createAuthMiddleware below.\n this.writeServerToken();\n\n // Create the app *before* express.createApp registers routes, so the auth\n // middleware runs before bodyParser — unauthenticated requests can't\n // trigger large-body parsing. CORS is registered before auth so 401\n // responses still carry CORS headers; otherwise browser-based clients\n // (bit-vscode) see a misleading CORS failure instead of the JSON 401.\n // The host-check middleware runs first to reject DNS-rebinding attacks\n // (where a malicious page resolves attacker.example to 127.0.0.1).\n const app = expressFactory();\n app.use(this.createHostCheckMiddleware({ loopbackOnly: !isOverride }));\n app.use(\n cors({\n origin(origin, callback) {\n callback(null, true);\n },\n credentials: true,\n })\n );\n app.use(this.createAuthMiddleware());\n this.express.createApp(app);\n const proxyHeaders = {\n Authorization: `${DEFAULT_AUTH_TYPE} ${Http.getToken()}`,\n origin: '',\n 'user-agent': 'bit-vscode-proxy',\n };\n const symphonyUrl = getSymphonyUrl();\n app.use(\n '/api/cloud-graphql',\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n createProxyMiddleware({\n target: `${symphonyUrl}/graphql`,\n changeOrigin: true,\n headers: proxyHeaders,\n on: {\n error: (err, req, res) => {\n this.logger.error('graphql cloud proxy error', err);\n // @ts-ignore\n res.writeHead(500, {\n 'Content-Type': 'text/plain',\n });\n res.end('Something went wrong with the proxy server of bit cloud graphql');\n },\n proxyReq: fixRequestBody,\n },\n })\n );\n\n app.use(\n '/api/cloud-rest',\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n createProxyMiddleware({\n target: `${symphonyUrl}`,\n changeOrigin: true,\n headers: proxyHeaders,\n on: {\n proxyRes: (proxyRes) => {\n proxyRes.headers['Access-Control-Allow-Credentials'] = 'true';\n },\n error: (err, req, res) => {\n this.logger.error('rest cloud proxy error', err);\n // @ts-ignore\n res.writeHead(500, {\n 'Content-Type': 'text/plain',\n });\n res.end('Something went wrong with the proxy server of bit cloud rest');\n },\n proxyReq: fixRequestBody,\n },\n })\n );\n\n app.use(\n '/websocket-server/subscriptions',\n createProxyMiddleware({\n on: {\n proxyReqWs: (proxyReq) => {\n Object.entries(proxyHeaders).forEach(([key, value]) => {\n proxyReq.setHeader(key, value);\n });\n },\n error: (err) => {\n this.logger.error('websocket cloud proxy error', err);\n },\n },\n pathFilter: '/',\n target: symphonyUrl,\n ws: true,\n changeOrigin: true,\n })\n );\n\n if (isOverride) {\n this.logger.debug(\n `api-server: binding to ${bindHost} (from BIT_SERVER_HOST), loopback Host-header check disabled`\n );\n }\n const server = await app.listen(port, bindHost);\n\n return new Promise((resolve, reject) => {\n server.on('error', (err) => {\n reject(err);\n });\n server.on('listening', () => {\n // important! if you change the message here, change it also in server-forever.ts and also in the vscode extension.\n this.logger.consoleSuccess(`Bit Server is listening on port ${port}`);\n this.writeUsedPort(port);\n this.startParentProcessMonitor();\n resolve(port);\n });\n });\n }\n\n writeUsedPort(port: number) {\n const filePath = this.getServerPortFilePath();\n fs.writeFileSync(filePath, port.toString(), { mode: 0o600 });\n // Node's `mode` write option is only honored when the file is created.\n // chmod explicitly so a pre-existing file with broader permissions gets\n // tightened to 0600.\n fs.chmodSync(filePath, 0o600);\n }\n\n /**\n * Generate a fresh per-server bearer token and persist it to a 0600 file.\n * Clients (e.g. the bit-vscode extension) read this file and send the token\n * as `Authorization: Bearer <token>` on every request.\n *\n * Backwards compatibility: clients that don't yet know about this file (older\n * extension versions) won't send the header and will receive 401 with a\n * message pointing them at the upgrade. Old bit-server versions don't write\n * this file, so a new client checking for it gracefully falls back to no\n * auth header — meaning a NEW extension keeps working against an OLD\n * bit-server.\n */\n private writeServerToken() {\n const token = crypto.randomBytes(32).toString('hex');\n const filePath = this.getServerTokenFilePath();\n fs.writeFileSync(filePath, token, { mode: 0o600 });\n // Node's `mode` write option is only honored when the file is created.\n // chmod explicitly so a pre-existing file with broader permissions gets\n // tightened to 0600.\n fs.chmodSync(filePath, 0o600);\n this.serverToken = token;\n }\n\n private getServerTokenFilePath() {\n return join(this.workspace.scope.path, 'server-token.txt');\n }\n\n /**\n * Host-header check: only accept requests targeting a loopback hostname.\n * Defends against DNS-rebinding attacks where a malicious page on\n * `evil.example` flips DNS to 127.0.0.1 — the browser sends `Host:\n * evil.example`, which we reject with 403 here.\n *\n * The server already listens on 127.0.0.1 only, so any request reaching us\n * arrived via loopback. The remaining concern is the *named* origin the\n * browser thinks it's talking to.\n *\n * Disabled when `BIT_SERVER_HOST` resolves to a non-loopback address,\n * since by definition the server is then reachable via a hostname we\n * can't enumerate ahead of time (e.g. a cloud-workspace hostname). In\n * that mode the bearer token is the primary line of defense; the\n * unauthenticated exemptions (`OPTIONS` preflight and `/api/_health`)\n * become reachable from the network — `/api/_health` is a tiny \"ok\"\n * liveness probe and intentionally exposed.\n */\n private createHostCheckMiddleware({ loopbackOnly }: { loopbackOnly: boolean }): Middleware {\n const allowed = new Set(['localhost', '127.0.0.1', '::1']);\n return (req: Request, res: Response, next: NextFunction) => {\n if (!loopbackOnly) return next();\n const hostHeader = req.headers.host || '';\n // Parse hostname from \"host:port\". IPv6 may be bracketed: \"[::1]:1234\"\n // → \"::1\"; IPv4 / hostname is plain: \"127.0.0.1:1234\" → \"127.0.0.1\".\n // HTTP hostnames are case-insensitive, so normalize before checking.\n const match = hostHeader.match(/^\\[([^\\]]+)\\]|^([^:]+)/);\n const host = match ? (match[1] || match[2]).toLowerCase() : '';\n if (!allowed.has(host)) {\n this.logger.debug(`api-server: rejected non-loopback Host header: ${hostHeader}`);\n res.status(403).end();\n return;\n }\n return next();\n };\n }\n\n /**\n * Authentication middleware: requires `Authorization: Bearer <serverToken>`\n * on every request except OPTIONS preflight (handled by cors) and the\n * unauthenticated `/api/_health` liveness probe.\n *\n * GET requests can also authenticate via a `?token=...` query parameter,\n * since browser-native WebSocket and EventSource cannot set custom headers\n * from JavaScript. The param is stripped from `req.url` before downstream\n * handling so the proxy and logs never see it.\n *\n * Runs before bodyParser so unauthenticated requests can't trigger\n * large-body parsing.\n */\n private createAuthMiddleware(): Middleware {\n return (req: Request, res: Response, next: NextFunction) => {\n if (req.method === 'OPTIONS') return next();\n // Use req.path (not req.url) so query strings don't bypass the\n // health-check exemption — e.g. /api/_health?cache-buster=1.\n if (req.path === '/api/_health') return next();\n\n const provided = parseBearerToken(req.headers.authorization);\n let authorized = !!this.serverToken && provided === this.serverToken;\n\n if (!authorized && this.serverToken && req.method === 'GET') {\n const queryIdx = req.url.indexOf('?');\n if (queryIdx >= 0) {\n const params = new URLSearchParams(req.url.slice(queryIdx + 1));\n if (params.get('token') === this.serverToken) {\n authorized = true;\n params.delete('token');\n const remaining = params.toString();\n req.url = req.url.slice(0, queryIdx) + (remaining ? `?${remaining}` : '');\n }\n }\n }\n\n if (!authorized) {\n this.logger.debug(`api-server: rejected unauthenticated request to ${req.path}`);\n res.status(401).jsonp({\n error: 'unauthorized',\n message:\n 'This bit-server requires authentication. Please upgrade your bit VS Code extension to the latest version.',\n });\n return;\n }\n return next();\n };\n }\n\n /**\n * Monitor the parent process (typically VSCode) and shut down if it dies.\n *\n * On Unix-like systems (macOS, Linux), when a parent process dies, orphaned children are\n * re-parented to PID 1 (init/launchd). By watching for `process.ppid` changing from\n * the original value to 1, we can detect that the parent exited and proactively\n * shut down the bit server to avoid leaving stale background processes running.\n *\n * Note: This orphan detection does not work on Windows, as Windows does not re-parent\n * processes to PID 1. On Windows, this method only logs the parent process info at startup.\n */\n private startParentProcessMonitor() {\n const originalPpid = process.ppid;\n\n // Log parent process info at startup\n const parentInfo = this.getProcessInfo(originalPpid);\n this.logger.debug(\n `bit server started. PID: ${process.pid}, Parent PID: ${originalPpid}, Parent command: ${parentInfo}`\n );\n\n // Skip orphan detection on Windows - PPID doesn't change to 1 when parent dies\n if (process.platform === 'win32') {\n return;\n }\n\n const checkInterval = 5000; // Check every 5 seconds\n const intervalId = setInterval(() => {\n const currentPpid = process.ppid;\n // If PPID changed to 1, our parent (e.g., VSCode) died and we were re-parented to init\n if (currentPpid === 1 && originalPpid !== 1) {\n this.logger.debug(\n `Parent process died (was PID ${originalPpid}: ${parentInfo}). Current PPID is now 1 (init/launchd). Shutting down bit server.`\n );\n clearInterval(intervalId);\n process.exit(0);\n }\n }, checkInterval);\n\n // Don't let this interval keep the process alive if everything else is done\n intervalId.unref();\n }\n\n /**\n * Get the command/path of a process by its PID.\n */\n private getProcessInfo(pid: number): string {\n try {\n if (process.platform === 'win32') {\n // Windows: use PowerShell Get-CimInstance (WMIC is deprecated/removed on modern Windows)\n const psCommand = `Get-CimInstance Win32_Process -Filter 'ProcessId = ${pid}' | Select-Object -ExpandProperty CommandLine`;\n const output = execSync(`powershell.exe -NoProfile -Command \"${psCommand}\"`, {\n encoding: 'utf8',\n timeout: 2000,\n });\n return output.trim() || 'unknown';\n } else {\n // macOS/Linux: use ps\n const output = execSync(`ps -o command= -p ${pid}`, { encoding: 'utf8', timeout: 2000 });\n return output.trim() || 'unknown';\n }\n } catch {\n return 'unknown (process may have exited)';\n }\n }\n\n async getRandomPort() {\n const startingPort = 4000; // we prefer to have the ports between 4000 and 4999.\n const randomNumber = crypto.randomInt(startingPort, 5000);\n const port = await Port.getPort(randomNumber, 65500);\n return port;\n }\n\n async getExistingUsedPort(): Promise<number | undefined> {\n const filePath = this.getServerPortFilePath();\n try {\n const fileContent = await fs.readFile(filePath, 'utf8');\n return parseInt(fileContent, 10);\n } catch (err: any) {\n if (err.code === 'ENOENT') {\n return undefined;\n }\n throw err;\n }\n }\n\n private getServerPortFilePath() {\n return join(this.workspace.scope.path, 'server-port.txt');\n }\n\n static dependencies = [\n CLIAspect,\n WorkspaceAspect,\n LoggerAspect,\n ExpressAspect,\n WatcherAspect,\n SnappingAspect,\n LanesAspect,\n InstallAspect,\n ExportAspect,\n CheckoutAspect,\n ComponentLogAspect,\n ImporterAspect,\n ComponentCompareAspect,\n GeneratorAspect,\n RemoveAspect,\n ConfigAspect,\n ApplicationAspect,\n DeprecationAspect,\n EnvsAspect,\n GraphAspect,\n ScopeAspect,\n ComponentAspect,\n SchemaAspect,\n ];\n static runtime = MainRuntime;\n static async provider([\n cli,\n workspace,\n loggerMain,\n express,\n watcher,\n snapping,\n lanes,\n installer,\n exporter,\n checkout,\n componentLog,\n importer,\n componentCompare,\n generator,\n remove,\n config,\n application,\n deprecation,\n envs,\n graph,\n scope,\n component,\n schema,\n ]: [\n CLIMain,\n Workspace,\n LoggerMain,\n ExpressMain,\n WatcherMain,\n SnappingMain,\n LanesMain,\n InstallMain,\n ExportMain,\n CheckoutMain,\n ComponentLogMain,\n ImporterMain,\n ComponentCompareMain,\n GeneratorMain,\n RemoveMain,\n ConfigMain,\n ApplicationMain,\n DeprecationMain,\n EnvsMain,\n GraphMain,\n ScopeMain,\n ComponentMain,\n SchemaMain,\n ]) {\n const logger = loggerMain.createLogger(ApiServerAspect.id);\n const apiServer = new ApiServerMain(workspace, logger, express, watcher, installer, importer);\n cli.register(new ServerCmd(apiServer));\n\n const apiForIDE = new APIForIDE(\n workspace,\n snapping,\n lanes,\n installer,\n exporter,\n checkout,\n componentLog,\n componentCompare,\n generator,\n remove,\n config,\n application,\n deprecation,\n envs,\n graph,\n scope,\n component,\n schema,\n logger\n );\n const cliRoute = new CLIRoute(logger, cli, apiForIDE);\n const cliRawRoute = new CLIRawRoute(logger, cli, apiForIDE);\n const ideRoute = new IDERoute(logger, apiForIDE);\n const sseEventsRoute = new SSEEventsRoute(logger, cli);\n // register only when the workspace is available. don't register this on a remote-scope, for security reasons.\n if (workspace) {\n express.register([cliRoute, cliRawRoute, ideRoute, sseEventsRoute]);\n }\n\n return apiServer;\n }\n}\n\nApiServerAspect.addRuntime(ApiServerMain);\n\nconst LOOPBACK_HOSTS = new Set(['127.0.0.1', 'localhost', '::1']);\n\n/**\n * Resolve the api-server bind host from `BIT_SERVER_HOST`, falling back to\n * loopback. `isOverride` is the single source of truth for \"is the server\n * reachable from outside loopback?\" — used both to choose the bind address\n * and to disable the loopback Host-header check. Derived from the *resolved*\n * host (not env presence) so `BIT_SERVER_HOST=127.0.0.1` and whitespace-only\n * values don't silently weaken the DNS-rebinding mitigation.\n */\nfunction resolveBindHost(): { bindHost: string; isOverride: boolean } {\n const override = process.env.BIT_SERVER_HOST?.trim();\n const bindHost = override || '127.0.0.1';\n return { bindHost, isOverride: !LOOPBACK_HOSTS.has(bindHost.toLowerCase()) };\n}\n\n/**\n * Extract the token from an `Authorization: Bearer <token>` header.\n * Lenient on scheme casing and surrounding whitespace so a slightly\n * non-canonical client header doesn't get rejected.\n */\nfunction parseBearerToken(header: string | undefined): string | undefined {\n if (!header) return undefined;\n const match = header.match(/^\\s*Bearer\\s+(\\S+)\\s*$/i);\n return match?.[1];\n}\n\nexport default ApiServerMain;\n"],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@teambit/api-server",
3
- "version": "1.0.1023",
3
+ "version": "1.0.1025",
4
4
  "homepage": "https://bit.cloud/teambit/harmony/api-server",
5
5
  "main": "dist/index.js",
6
6
  "componentId": {
7
7
  "scope": "teambit.harmony",
8
8
  "name": "api-server",
9
- "version": "1.0.1023"
9
+ "version": "1.0.1025"
10
10
  },
11
11
  "dependencies": {
12
12
  "filenamify": "4.2.0",
@@ -19,45 +19,45 @@
19
19
  "http-proxy-middleware": "^3.0.3",
20
20
  "chalk": "4.1.2",
21
21
  "pretty-time": "1.1.0",
22
- "@teambit/application": "1.0.995",
23
- "@teambit/checkout": "1.0.996",
24
- "@teambit/component-compare": "1.0.995",
25
- "@teambit/component-log": "1.0.995",
22
+ "@teambit/application": "1.0.996",
23
+ "@teambit/checkout": "1.0.997",
24
+ "@teambit/component-compare": "1.0.996",
25
+ "@teambit/component-log": "1.0.996",
26
26
  "@teambit/component.modules.component-url": "0.0.190",
27
27
  "@teambit/component.modules.merge-helper": "0.0.60",
28
- "@teambit/component": "1.0.995",
28
+ "@teambit/component": "1.0.996",
29
29
  "@teambit/config": "0.0.1502",
30
- "@teambit/deprecation": "1.0.995",
31
- "@teambit/envs": "1.0.995",
32
- "@teambit/export": "1.0.995",
33
- "@teambit/generator": "1.0.996",
34
- "@teambit/graph": "1.0.995",
35
- "@teambit/install": "1.0.995",
30
+ "@teambit/deprecation": "1.0.996",
31
+ "@teambit/envs": "1.0.996",
32
+ "@teambit/export": "1.0.996",
33
+ "@teambit/generator": "1.0.997",
34
+ "@teambit/graph": "1.0.996",
35
+ "@teambit/install": "1.0.996",
36
36
  "@teambit/lane-id": "0.0.312",
37
37
  "@teambit/lanes.modules.diff": "0.0.620",
38
+ "@teambit/lanes": "1.0.1014",
38
39
  "@teambit/legacy.consumer": "0.0.117",
39
40
  "@teambit/legacy.scope": "0.0.117",
40
41
  "@teambit/legacy.utils": "0.0.38",
41
42
  "@teambit/logger": "0.0.1420",
42
- "@teambit/objects": "0.0.502",
43
- "@teambit/remove": "1.0.995",
44
- "@teambit/schema": "1.0.995",
45
- "@teambit/scope": "1.0.995",
46
- "@teambit/snapping": "1.0.995",
47
- "@teambit/workspace": "1.0.995",
43
+ "@teambit/objects": "0.0.503",
44
+ "@teambit/remove": "1.0.996",
45
+ "@teambit/schema": "1.0.996",
46
+ "@teambit/scope": "1.0.996",
47
+ "@teambit/snapping": "1.0.996",
48
+ "@teambit/workspace": "1.0.996",
48
49
  "@teambit/harmony": "0.4.7",
49
50
  "@teambit/cli": "0.0.1327",
50
51
  "@teambit/express": "0.0.1426",
51
52
  "@teambit/harmony.modules.send-server-sent-events": "0.0.18",
52
- "@teambit/importer": "1.0.995",
53
+ "@teambit/importer": "1.0.996",
53
54
  "@teambit/legacy.constants": "0.0.27",
54
55
  "@teambit/scope.network": "0.0.117",
55
56
  "@teambit/toolbox.network.get-port": "1.0.21",
56
- "@teambit/watcher": "1.0.995",
57
+ "@teambit/watcher": "1.0.996",
57
58
  "@teambit/harmony.modules.feature-toggle": "0.0.37",
58
59
  "@teambit/legacy.loader": "0.0.19",
59
- "@teambit/legacy.logger": "0.0.39",
60
- "@teambit/lanes": "1.0.1013"
60
+ "@teambit/legacy.logger": "0.0.39"
61
61
  },
62
62
  "devDependencies": {
63
63
  "@types/fs-extra": "9.0.7",