detectHostIP method

Future<String> detectHostIP(
  1. bool isIdeRunningInWindows,
  2. int port
)

Detects the host IP to use to connect to the extension.

Implementation

Future<String> detectHostIP(bool isIdeRunningInWindows, int port) async {
  final cacheKey = '$isIdeRunningInWindows:$port';
  if (_hostIPCache.containsKey(cacheKey)) {
    return _hostIPCache[cacheKey]!;
  }

  final envOverride = Platform.environment['MAGE_IDE_HOST_OVERRIDE'];
  if (envOverride != null) {
    _hostIPCache[cacheKey] = envOverride;
    return envOverride;
  }

  // Default to localhost
  const defaultHost = '127.0.0.1';

  // WSL-specific host detection
  if (Platform.isLinux &&
      Platform.environment.containsKey('WSL_DISTRO_NAME') &&
      isIdeRunningInWindows) {
    try {
      final result = await Process.run('bash', [
        '-c',
        'ip route show | grep -i default',
      ]);
      if (result.exitCode == 0) {
        final match = RegExp(
          r'default via (\d+\.\d+\.\d+\.\d+)',
        ).firstMatch(result.stdout as String);
        if (match != null) {
          final gatewayIP = match.group(1)!;
          if (await checkIdeConnection(gatewayIP, port)) {
            _hostIPCache[cacheKey] = gatewayIP;
            return gatewayIP;
          }
        }
      }
    } catch (_) {}
  }

  _hostIPCache[cacheKey] = defaultHost;
  return defaultHost;
}