{"id":"2d1d6f7bc7eb8110","repo":"mongodb/node-mongodb-native","slug":"can-only-specify-both-of-proxy-username-password-o","errorCode":null,"errorMessage":"Can only specify both of proxy username/password or neither","messagePattern":"Can only specify both of proxy username/password or neither","errorType":"exception","errorClass":"MongoParseError","httpStatus":null,"severity":"error","filePath":"src/connection_string.ts","lineNumber":515,"sourceCode":"    }\n  }\n\n  if (mongoOptions.directConnection && mongoOptions.hosts.length !== 1) {\n    throw new MongoParseError('directConnection option requires exactly one host');\n  }\n\n  if (\n    !mongoOptions.proxyHost &&\n    (mongoOptions.proxyPort || mongoOptions.proxyUsername || mongoOptions.proxyPassword)\n  ) {\n    throw new MongoParseError('Must specify proxyHost if other proxy options are passed');\n  }\n\n  if (\n    (mongoOptions.proxyUsername && !mongoOptions.proxyPassword) ||\n    (!mongoOptions.proxyUsername && mongoOptions.proxyPassword)\n  ) {\n    throw new MongoParseError('Can only specify both of proxy username/password or neither');\n  }\n\n  const proxyOptions = ['proxyHost', 'proxyPort', 'proxyUsername', 'proxyPassword'].map(\n    key => urlOptions.get(key) ?? []\n  );\n\n  if (proxyOptions.some(options => options.length > 1)) {\n    throw new MongoParseError(\n      'Proxy options cannot be specified multiple times in the connection string'\n    );\n  }\n\n  mongoOptions.mongoLoggerOptions = MongoLogger.resolveOptions(\n    {\n      MONGODB_LOG_COMMAND: process.env.MONGODB_LOG_COMMAND,\n      MONGODB_LOG_TOPOLOGY: process.env.MONGODB_LOG_TOPOLOGY,\n      MONGODB_LOG_SERVER_SELECTION: process.env.MONGODB_LOG_SERVER_SELECTION,\n      MONGODB_LOG_CONNECTION: process.env.MONGODB_LOG_CONNECTION,","sourceCodeStart":497,"sourceCodeEnd":533,"githubUrl":"https://github.com/mongodb/node-mongodb-native/blob/3366c21a6311e02f1be91da982f9b93d3cce99a0/src/connection_string.ts#L497-L533","documentation":"Thrown when exactly one of proxyUsername / proxyPassword is set (connection_string.ts:511-516). The driver requires them as a pair; specifying only one is treated as a misconfiguration because there is no useful 'username-only' or 'password-only' auth mode for the proxy.","triggerScenarios":"Options { proxyHost: 'p', proxyUsername: 'u' } (no password) or URI '?proxyHost=p&proxyPassword=secret' (no username).","commonSituations":"Templating only the proxyPassword from a secret while hardcoding username elsewhere; partial env var population (PROXY_USER set but PROXY_PASS unset).","solutions":["Provide both proxyUsername and proxyPassword together.","Or remove both to use an unauthenticated proxy.","Audit your env-var wiring to ensure both variables are present."],"exampleFix":"// before\nconst c = new MongoClient(uri, { proxyHost: 'p', proxyPort: 1080, proxyUsername: 'u' });\n// after\nconst c = new MongoClient(uri, { proxyHost: 'p', proxyPort: 1080, proxyUsername: 'u', proxyPassword: 'secret' });","handlingStrategy":"validation","validationCode":"const hasUser = 'proxyUsername' in opts || new URL(uri).searchParams.has('proxyUsername');\nconst hasPass = 'proxyPassword' in opts || new URL(uri).searchParams.has('proxyPassword');\nif (hasUser !== hasPass) {\n  throw new Error('Provide both proxyUsername and proxyPassword, or neither');\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Source proxyUsername and proxyPassword from the same config block.","Fail fast in your config loader when only one is present."],"tags":["connection-string","proxy","configuration"],"analyzedSha":"3366c21a6311e02f1be91da982f9b93d3cce99a0","analyzedAt":"2026-08-04T13:40:15.335Z","schemaVersion":2}