@betshare/infra-mongo
v0.1.0
Published
Shared MongoDB connection-policy helpers (URI building, db name, connect options) for BetShareMarket services
Downloads
68
Readme
@betshare/infra-mongo
Pure MongoDB connection-policy helpers for BetShareMarket services. No client, no
driver wrapping, no runtime dependencies — every function returns a plain string
or object so it can be unit-tested in isolation and dropped straight into
Mongoose (mongoose.connect) or the native driver (new MongoClient) at the
service call site. Extracted from the duplicated buildMongoURI copies in
odds-worker and api-server.
Install
In production, consume from the private registry, version-pinned per service:
npm install @betshare/infra-mongo// package.json
"@betshare/infra-mongo": "^0.1.0"API
import {
buildMongoURI,
resolveDbName,
mongoConnectOptions,
} from "@betshare/infra-mongo";buildMongoURI(baseURI: string | undefined): string
Ensures the betsharemarket database name is inserted before any query params
when the base URI omits a db path. Ported verbatim from
services/odds-worker/src/utils/buildMongoURI.ts (identical to the former inline
copy in services/api-server/src/app.ts).
- Empty or
undefinedinput →mongodb://localhost:27017/betsharemarket. - No db path → inserts
/betsharemarket. - Existing
/somedbpath → kept as-is. mongodb+srv://is supported.
resolveDbName(): string
Returns process.env.MONGODB_DB_NAME when set, otherwise "betsharemarket".
mongoConnectOptions(input: MongoOptionsInput): Record<string, number>
Returns the connection options object: the required maxPoolSize plus the
timeout defaults, with any provided override winning.
mongoConnectOptions({ maxPoolSize: 10 });
// { maxPoolSize: 10, serverSelectionTimeoutMS: 30000, socketTimeoutMS: 120000, connectTimeoutMS: 10000 }Defaults: serverSelectionTimeoutMS: 30000, socketTimeoutMS: 120000,
connectTimeoutMS: 10000. Optional minPoolSize / maxIdleTimeMS are emitted
only when explicitly provided (never as undefined).
maxPoolSize has no default by design: each service must pass an explicit
numeric literal so the connection-budget validator
(scripts/validate_connection_budget.py) can grep the per-service pool cap at
the call site (ADR 2026-06-18-mongo-connection-pool-budget-vcore-m10).
Usage
// Mongoose (api-server, odds-worker)
mongoose.connect(buildMongoURI(process.env.MONGO_URI), mongoConnectOptions({ maxPoolSize: 10 }));
// Native driver (api-events)
const client = new MongoClient(buildMongoURI(process.env.MONGO_URI), mongoConnectOptions({ maxPoolSize: 5 }));
const db = client.db(resolveDbName());