{"record":{"id":"8d46ad906b1003e9","repo":"ruvnet/ruflo","slug":"websocket-transport-requires-host-and-port-configu","errorCode":null,"errorMessage":"WebSocket transport requires host and port configuration","messagePattern":"WebSocket transport requires host and port configuration","errorType":"validation","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"v3/@claude-flow/mcp/src/transport/index.ts","lineNumber":52,"sourceCode":"  config?: Partial<TransportConfig>\n): ITransport {\n  switch (type) {\n    case 'stdio':\n      return createStdioTransport(logger, config as StdioTransportConfig);\n\n    case 'http':\n      if (!config || !('host' in config) || !('port' in config)) {\n        throw new Error('HTTP transport requires host and port configuration');\n      }\n      return createHttpTransport(logger, {\n        host: config.host as string,\n        port: config.port as number,\n        ...config,\n      } as HttpTransportConfig);\n\n    case 'websocket':\n      if (!config || !('host' in config) || !('port' in config)) {\n        throw new Error('WebSocket transport requires host and port configuration');\n      }\n      return createWebSocketTransport(logger, {\n        host: config.host as string,\n        port: config.port as number,\n        ...config,\n      } as WebSocketTransportConfig);\n\n    case 'in-process':\n      return createInProcessTransport(logger);\n\n    default:\n      throw new Error(`Unknown transport type: ${type}`);\n  }\n}\n\nclass InProcessTransport implements ITransport {\n  public readonly type: TransportType = 'in-process';\n","sourceCodeStart":34,"sourceCodeEnd":70,"githubUrl":"https://github.com/ruvnet/ruflo/blob/fa13ee4ad60ac2090b1480656eb233521790d640/v3/@claude-flow/mcp/src/transport/index.ts#L34-L70","documentation":"createTransport('websocket', logger, config) mirrors the http branch: it requires host and port keys to be present in config before creating the WebSocketTransport, and throws this error otherwise. The path (default '/ws') is optional; only the address and port are mandatory. Like the http guard it checks key presence, not value validity.","triggerScenarios":"Calling createTransport('websocket', logger) with no config; building config from env where WS_HOST/WS_PORT are unset; passing a config object typed for stdio (inputStream/outputStream) into the websocket branch.","commonSituations":"WebSocket fan-out configured via environment variables that differ per environment; sharing one Partial<TransportConfig> across several transport types; CI pipelines missing the WS section of config.","solutions":["Pass explicit values: createTransport('websocket', logger, { host: '127.0.0.1', port: 3001, path: '/ws' })","Default env-derived values: host: process.env.WS_HOST ?? '127.0.0.1', port: Number(process.env.WS_PORT ?? 3001)","Call createWebSocketTransport(logger, cfg) directly so TypeScript enforces WebSocketTransportConfig"],"exampleFix":"// before\nconst t = createTransport('websocket', logger, wsConfig as any);\n\n// after\nconst t = createTransport('websocket', logger, {\n  host: process.env.WS_HOST ?? '127.0.0.1',\n  port: Number(process.env.WS_PORT ?? 3001),\n  path: '/ws',\n});","handlingStrategy":"validation","validationCode":"const wsCfg = {\n  host: process.env.WS_HOST ?? '127.0.0.1',\n  port: Number(process.env.WS_PORT ?? 3001),\n  path: '/ws',\n};\nif (!('host' in wsCfg) || !('port' in wsCfg)) {\n  throw new Error('WebSocket transport config incomplete');\n}\nconst t = createTransport('websocket', logger, wsCfg);","typeGuard":"function isWebSocketConfig(c: unknown): c is { host: string; port: number; path?: string } {\n  return (\n    !!c && typeof c === 'object' &&\n    'host' in c && typeof (c as { host: unknown }).host === 'string' &&\n    'port' in c && typeof (c as { port: unknown }).port === 'number'\n  );\n}","tryCatchPattern":null,"preventionTips":["Fail at boot with a clear message when WS_HOST/WS_PORT are missing","Keep websocket config separate from http config instead of sharing one object","Use createWebSocketTransport directly for compile-time enforcement of the config shape"],"tags":["transport","websocket","configuration","factory"],"backgroundTag":"missing-configuration","analyzedSha":"fa13ee4ad60ac2090b1480656eb233521790d640","analyzedAt":"2026-08-18T21:34:22.708Z","schemaVersion":2},"datasetVersion":"2026-08-22T09:17:25.309Z"}