Registry / database / mongo-leader

mongo-leader

JSON →
library1.6.7jsnpmunverified

A Node.js library for MongoDB-backed leader election, inspired by redis-leader. Current stable version is 1.6.7, with regular releases. It extends EventEmitter to emit 'elected' and 'revoked' events when leadership status changes. Key differentiators: automatic TTL index handling (since 1.5.0) avoids IndexOptionsConflict on config changes; supports lazy start and polling; minimal dependencies. Compared to alternatives like node-zookeeper-leader or redis-leader, it leverages MongoDB's existing infrastructure.

database
Install & Compatibility
Where this runs

No compatibility data collected yet for this library.

Code
Verified usage

Verified import paths — ran on the pinned version, not inferred.

ESM-only. The package does not support CommonJS require.

import { Leader } from 'mongo-leader'

TypeScript type export for configuring Leader constructor options.

import type { LeaderOptions } from 'mongo-leader'

Enum of event names ('elected' | 'revoked'). Must use the exported LeaderEvent symbol.

import { LeaderEvent } from 'mongo-leader'

Shows basic setup: connect to MongoDB, create Leader instance with TTL/wait options, listen for events, start leader election, poll status, and graceful shutdown.

import { MongoClient } from 'mongodb'; import { Leader } from 'mongo-leader'; const url = process.env.MONGO_URL ?? 'mongodb://localhost:27017'; const client = new MongoClient(url); await client.connect(); const db = client.db('leader_election'); const leader = new Leader(db, { ttl: 1000, wait: 500 }); leader.on('elected', () => console.log('Became leader')); leader.on('revoked', () => console.log('Lost leadership')); await leader.start(); // Check leadership status periodically setInterval(async () => { const isLeader = await leader.isLeader(); console.log(`Am I leader? ${isLeader}`); }, 100); // Graceful shutdown process.on('SIGINT', async () => { await leader.stop(); await client.close(); process.exit(0); });
Debug
Known footguns
breakingPackage is ESM-only since v1.0.0 - cannot be used with CommonJS require().
gotchaThe Leader constructor requires a Db object, not a MongoClient or collection. Passing the wrong object causes runtime error.
deprecatedUsing auto-start constructor option is deprecated in favor of explicit start() call.
Upgrade
Version history

Breaking-change detection hasn't run for this library yet.

Audit
Security & dependencies

CVE tracking and dependency tree are planned for a later release.

Agent activity
6 hits · last 30 days
gptbot
3
Resources