{"record":{"id":"ce45777b8811d4fd","repo":"mongodb/node-mongodb-native","slug":"servermonitoringmode-must-be-one-of-auto-poll","errorCode":null,"errorMessage":"serverMonitoringMode must be one of `auto`, `poll`, or `stream`","messagePattern":"serverMonitoringMode must be one of `auto`, `poll`, or `stream`","errorType":"exception","errorClass":"MongoParseError","httpStatus":null,"severity":"error","filePath":"src/connection_string.ts","lineNumber":1093,"sourceCode":"  retryReads: {\n    default: true,\n    type: 'boolean'\n  },\n  retryWrites: {\n    default: true,\n    type: 'boolean'\n  },\n  runtimeAdapters: {\n    type: 'record'\n  },\n  serializeFunctions: {\n    type: 'boolean'\n  },\n  serverMonitoringMode: {\n    default: 'auto',\n    transform({ values: [value] }) {\n      if (!Object.values(ServerMonitoringMode).includes(value as any)) {\n        throw new MongoParseError(\n          'serverMonitoringMode must be one of `auto`, `poll`, or `stream`'\n        );\n      }\n      return value;\n    }\n  },\n  serverSelectionTimeoutMS: {\n    default: 30000,\n    type: 'uint'\n  },\n  servername: {\n    type: 'string'\n  },\n  socketTimeoutMS: {\n    // TODO(NODE-6491): deprecated: 'Please use timeoutMS instead',\n    default: 0,\n    type: 'uint'\n  },","sourceCodeStart":1075,"sourceCodeEnd":1111,"githubUrl":"https://github.com/mongodb/node-mongodb-native/blob/dce7939f86fb283e167ad709955abedb7bf23124/src/connection_string.ts#L1075-L1111","documentation":"`serverMonitoringMode` selects how the driver monitors servers (heartbeat streaming vs polling vs automatic). The transform at src/connection_string.ts:1091 checks `Object.values(ServerMonitoringMode).includes(value)`. The frozen object at src/sdam/monitor.ts:44 only contains `auto`, `poll`, `stream`; any other value throws MongoParseError at src/connection_string.ts:1093.","triggerScenarios":"Passing `serverMonitoringMode: 'automatic'`, `'async'`, `'event'`; or setting env `MONGODB_SERVER_MONITORING_MODE=continuous`. Case matters — `'Auto'` or `'STREAM'` will not match.","commonSituations":"Misremembering the enum name; copy-pasting values from server-side documentation that uses different terminology; case differences from environment variables that aren't lowercased before use.","solutions":["Use exactly `auto`, `poll`, or `stream` (lowercase).","Lowercase environment-provided values before passing them in.","Omit the option to use the default `auto`."],"exampleFix":"// before\nnew MongoClient(uri, { serverMonitoringMode: 'automatic' });\n\n// after\nnew MongoClient(uri, { serverMonitoringMode: 'auto' });","handlingStrategy":"validation","validationCode":"const MODES = ['auto','poll','stream'];\nif (opts.serverMonitoringMode != null && !MODES.includes(String(opts.serverMonitoringMode).toLowerCase())) {\n  throw new Error(`serverMonitoringMode must be one of ${MODES.join(', ')}`);\n}","typeGuard":"function isServerMonitoringMode(v: unknown): v is 'auto'|'poll'|'stream' { return typeof v === 'string' && ['auto','poll','stream'].includes(v); }","tryCatchPattern":"try { client = new MongoClient(uri, opts); } catch (e) { if (e instanceof MongoParseError && /serverMonitoringMode/.test(e.message)) { opts.serverMonitoringMode = 'auto'; client = new MongoClient(uri, opts); } else throw e; }","preventionTips":["Lowercase env-derived values before use.","Omit the option to accept the default 'auto'.","Document the three valid values wherever operators set this."],"tags":["sdam","monitoring","configuration"],"backgroundTag":null,"analyzedSha":"dce7939f86fb283e167ad709955abedb7bf23124","analyzedAt":"2026-08-11T04:54:53.215Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}