"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Admin = void 0; const bson_1 = require("./bson"); const execute_operation_1 = require("./operations/execute_operation"); const list_databases_1 = require("./operations/list_databases"); const remove_user_1 = require("./operations/remove_user"); const run_command_1 = require("./operations/run_command"); const validate_collection_1 = require("./operations/validate_collection"); /** * The **Admin** class is an internal class that allows convenient access to * the admin functionality and commands for MongoDB. * * **ADMIN Cannot directly be instantiated** * @public * * @example * ```ts * import { MongoClient } from 'mongodb'; * * const client = new MongoClient('mongodb://localhost:27017'); * const admin = client.db().admin(); * const dbInfo = await admin.listDatabases(); * for (const db of dbInfo.databases) { * console.log(db.name); * } * ``` */ class Admin { /** * Create a new Admin instance * @internal */ constructor(db) { this.s = { db }; } /** * Execute a command * * The driver will ensure the following fields are attached to the command sent to the server: * - `lsid` - sourced from an implicit session or options.session * - `$readPreference` - defaults to primary or can be configured by options.readPreference * - `$db` - sourced from the name of this database * * If the client has a serverApi setting: * - `apiVersion` * - `apiStrict` * - `apiDeprecationErrors` * * When in a transaction: * - `readConcern` - sourced from readConcern set on the TransactionOptions * - `writeConcern` - sourced from writeConcern set on the TransactionOptions * * Attaching any of the above fields to the command will have no effect as the driver will overwrite the value. * * @param command - The command to execute * @param options - Optional settings for the command */ async command(command, options) { return (0, execute_operation_1.executeOperation)(this.s.db.client, new run_command_1.RunAdminCommandOperation(command, { ...(0, bson_1.resolveBSONOptions)(options), session: options?.session, readPreference: options?.readPreference })); } /** * Retrieve the server build information * * @param options - Optional settings for the command */ async buildInfo(options) { return this.command({ buildinfo: 1 }, options); } /** * Retrieve the server build information * * @param options - Optional settings for the command */ async serverInfo(options) { return this.command({ buildinfo: 1 }, options); } /** * Retrieve this db's server status. * * @param options - Optional settings for the command */ async serverStatus(options) { return this.command({ serverStatus: 1 }, options); } /** * Ping the MongoDB server and retrieve results * * @param options - Optional settings for the command */ async ping(options) { return this.command({ ping: 1 }, options); } /** * Remove a user from a database * * @param username - The username to remove * @param options - Optional settings for the command */ async removeUser(username, options) { return (0, execute_operation_1.executeOperation)(this.s.db.client, new remove_user_1.RemoveUserOperation(this.s.db, username, { dbName: 'admin', ...options })); } /** * Validate an existing collection * * @param collectionName - The name of the collection to validate. * @param options - Optional settings for the command */ async validateCollection(collectionName, options = {}) { return (0, execute_operation_1.executeOperation)(this.s.db.client, new validate_collection_1.ValidateCollectionOperation(this, collectionName, options)); } /** * List the available databases * * @param options - Optional settings for the command */ async listDatabases(options) { return (0, execute_operation_1.executeOperation)(this.s.db.client, new list_databases_1.ListDatabasesOperation(this.s.db, options)); } /** * Get ReplicaSet status * * @param options - Optional settings for the command */ async replSetGetStatus(options) { return this.command({ replSetGetStatus: 1 }, options); } } exports.Admin = Admin; //# sourceMappingURL=admin.js.map