@@ -12,7 +12,7 @@ import { type Collection } from '../collection';
1212import { type FindCursor } from '../cursor/find_cursor' ;
1313import { type Db } from '../db' ;
1414import { getMongoDBClientEncryption } from '../deps' ;
15- import { type MongoClient } from '../mongo_client' ;
15+ import { type MongoClient , type MongoClientOptions } from '../mongo_client' ;
1616import { type Filter , type WithId } from '../mongo_types' ;
1717import { type CreateCollectionOptions } from '../operations/create_collection' ;
1818import { type DeleteResult } from '../operations/delete' ;
@@ -28,7 +28,11 @@ import {
2828 type KMSProviders ,
2929 refreshKMSCredentials
3030} from './providers/index' ;
31- import { type CSFLEKMSTlsOptions , StateMachine } from './state_machine' ;
31+ import {
32+ type ClientEncryptionSocketOptions ,
33+ type CSFLEKMSTlsOptions ,
34+ StateMachine
35+ } from './state_machine' ;
3236
3337/**
3438 * @public
@@ -199,7 +203,8 @@ export class ClientEncryption {
199203
200204 const stateMachine = new StateMachine ( {
201205 proxyOptions : this . _proxyOptions ,
202- tlsOptions : this . _tlsOptions
206+ tlsOptions : this . _tlsOptions ,
207+ socketOptions : autoSelectSocketOptions ( this . _client . options )
203208 } ) ;
204209
205210 const dataKey = deserialize ( await stateMachine . execute ( this , context ) ) as DataKey ;
@@ -256,7 +261,8 @@ export class ClientEncryption {
256261 const context = this . _mongoCrypt . makeRewrapManyDataKeyContext ( filterBson , keyEncryptionKeyBson ) ;
257262 const stateMachine = new StateMachine ( {
258263 proxyOptions : this . _proxyOptions ,
259- tlsOptions : this . _tlsOptions
264+ tlsOptions : this . _tlsOptions ,
265+ socketOptions : autoSelectSocketOptions ( this . _client . options )
260266 } ) ;
261267
262268 const { v : dataKeys } = deserialize ( await stateMachine . execute ( this , context ) ) ;
@@ -637,7 +643,8 @@ export class ClientEncryption {
637643
638644 const stateMachine = new StateMachine ( {
639645 proxyOptions : this . _proxyOptions ,
640- tlsOptions : this . _tlsOptions
646+ tlsOptions : this . _tlsOptions ,
647+ socketOptions : autoSelectSocketOptions ( this . _client . options )
641648 } ) ;
642649
643650 const { v } = deserialize ( await stateMachine . execute ( this , context ) ) ;
@@ -715,7 +722,8 @@ export class ClientEncryption {
715722 const valueBuffer = serialize ( { v : value } ) ;
716723 const stateMachine = new StateMachine ( {
717724 proxyOptions : this . _proxyOptions ,
718- tlsOptions : this . _tlsOptions
725+ tlsOptions : this . _tlsOptions ,
726+ socketOptions : autoSelectSocketOptions ( this . _client . options )
719727 } ) ;
720728 const context = this . _mongoCrypt . makeExplicitEncryptionContext ( valueBuffer , contextOptions ) ;
721729
@@ -957,3 +965,21 @@ export interface RangeOptions {
957965 sparsity : Long ;
958966 precision ?: number ;
959967}
968+
969+ /**
970+ * Get the socket options from the client.
971+ * @param baseOptions - The mongo client options.
972+ * @returns ClientEncryptionSocketOptions
973+ */
974+ export function autoSelectSocketOptions (
975+ baseOptions : MongoClientOptions
976+ ) : ClientEncryptionSocketOptions {
977+ const options : ClientEncryptionSocketOptions = { autoSelectFamily : true } ;
978+ if ( 'autoSelectFamily' in baseOptions ) {
979+ options . autoSelectFamily = baseOptions . autoSelectFamily ;
980+ }
981+ if ( 'autoSelectFamilyAttemptTimeout' in baseOptions ) {
982+ options . autoSelectFamilyAttemptTimeout = baseOptions . autoSelectFamilyAttemptTimeout ;
983+ }
984+ return options ;
985+ }
0 commit comments