12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.connect = void 0;
- const connection_string_1 = require("../connection_string");
- const constants_1 = require("../constants");
- const error_1 = require("../error");
- const topology_1 = require("../sdam/topology");
- function connect(mongoClient, options, callback) {
- if (!callback) {
- throw new error_1.MongoInvalidArgumentError('Callback function must be provided');
- }
- // If a connection already been established, we can terminate early
- if (mongoClient.topology && mongoClient.topology.isConnected()) {
- return callback(undefined, mongoClient);
- }
- const logger = mongoClient.logger;
- const connectCallback = err => {
- const warningMessage = 'seed list contains no mongos proxies, replicaset connections requires ' +
- 'the parameter replicaSet to be supplied in the URI or options object, ' +
- 'mongodb://server:port/db?replicaSet=name';
- if (err && err.message === 'no mongos proxies found in seed list') {
- if (logger.isWarn()) {
- logger.warn(warningMessage);
- }
- // Return a more specific error message for MongoClient.connect
- // TODO(NODE-3483)
- return callback(new error_1.MongoRuntimeError(warningMessage));
- }
- callback(err, mongoClient);
- };
- if (typeof options.srvHost === 'string') {
- return (0, connection_string_1.resolveSRVRecord)(options, (err, hosts) => {
- if (err || !hosts)
- return callback(err);
- for (const [index, host] of hosts.entries()) {
- options.hosts[index] = host;
- }
- return createTopology(mongoClient, options, connectCallback);
- });
- }
- return createTopology(mongoClient, options, connectCallback);
- }
- exports.connect = connect;
- function createTopology(mongoClient, options, callback) {
- // Create the topology
- const topology = new topology_1.Topology(options.hosts, options);
- // Events can be emitted before initialization is complete so we have to
- // save the reference to the topology on the client ASAP if the event handlers need to access it
- mongoClient.topology = topology;
- topology.client = mongoClient;
- topology.once(topology_1.Topology.OPEN, () => mongoClient.emit('open', mongoClient));
- for (const event of constants_1.MONGO_CLIENT_EVENTS) {
- topology.on(event, (...args) => mongoClient.emit(event, ...args));
- }
- // initialize CSFLE if requested
- if (mongoClient.autoEncrypter) {
- mongoClient.autoEncrypter.init(err => {
- if (err) {
- return callback(err);
- }
- topology.connect(options, err => {
- if (err) {
- topology.close({ force: true });
- return callback(err);
- }
- options.encrypter.connectInternalClient(error => {
- if (error)
- return callback(error);
- callback(undefined, topology);
- });
- });
- });
- return;
- }
- // otherwise connect normally
- topology.connect(options, err => {
- if (err) {
- topology.close({ force: true });
- return callback(err);
- }
- callback(undefined, topology);
- return;
- });
- }
- //# sourceMappingURL=connect.js.map
|