@@ -2,7 +2,7 @@ import { promises as fs } from 'fs';
22import * as os from 'os' ;
33import * as process from 'process' ;
44
5- import { BSON , Int32 } from '../../bson' ;
5+ import { BSON , type Document , Int32 } from '../../bson' ;
66import { MongoInvalidArgumentError } from '../../error' ;
77import type { MongoOptions } from '../../mongo_client' ;
88
@@ -72,13 +72,13 @@ export class LimitedSizeDocument {
7272 return true ;
7373 }
7474
75- toObject ( ) : ClientMetadata {
75+ toObject ( ) : Document {
7676 return BSON . deserialize ( BSON . serialize ( this . document ) , {
7777 promoteLongs : false ,
7878 promoteBuffers : false ,
7979 promoteValues : false ,
8080 useBigInt64 : false
81- } ) as ClientMetadata ;
81+ } ) ;
8282 }
8383}
8484
@@ -92,17 +92,8 @@ type MakeClientMetadataOptions = Pick<MongoOptions, 'appName' | 'driverInfo'>;
9292 * 4. Truncate `platform`. -- special we do not truncate this field
9393 */
9494export function makeClientMetadata ( options : MakeClientMetadataOptions ) : ClientMetadata {
95- let metadataDocument = new LimitedSizeDocument ( 512 ) ;
96- metadataDocument = addNonEnvClientMetadata ( options , metadataDocument ) ;
97- metadataDocument = addFAASOnlyEnvClientMetadata ( metadataDocument ) ;
98- return metadataDocument . toObject ( ) ;
99- }
95+ const metadataDocument = new LimitedSizeDocument ( 512 ) ;
10096
101- /** @internal */
102- export function addNonEnvClientMetadata (
103- options : MakeClientMetadataOptions ,
104- metadataDocument : LimitedSizeDocument
105- ) : LimitedSizeDocument {
10697 const { appName = '' } = options ;
10798 // Add app name first, it must be sent
10899 if ( appName . length > 0 ) {
@@ -152,11 +143,6 @@ export function addNonEnvClientMetadata(
152143 }
153144 }
154145
155- return metadataDocument ;
156- }
157-
158- /** @internal */
159- function addFAASOnlyEnvClientMetadata ( metadataDocument : LimitedSizeDocument ) : LimitedSizeDocument {
160146 const faasEnv = getFAASEnv ( ) ;
161147 if ( faasEnv != null ) {
162148 if ( ! metadataDocument . ifItFitsItSits ( 'env' , faasEnv ) ) {
@@ -167,15 +153,13 @@ function addFAASOnlyEnvClientMetadata(metadataDocument: LimitedSizeDocument): Li
167153 }
168154 }
169155 }
170- return metadataDocument ;
156+ return metadataDocument . toObject ( ) as ClientMetadata ;
171157}
172158
173159let isDocker : boolean ;
174160let dockerPromise : any ;
175161/** @internal */
176- export async function addAllEnvClientMetadata ( metadataDocument : LimitedSizeDocument ) {
177- const faasEnv = getFAASEnv ( ) ;
178-
162+ export async function addContainerMetadata ( originalMetadata : ClientMetadata ) {
179163 async function getContainerMetadata ( ) {
180164 const containerMetadata : Record < string , any > = { } ;
181165 if ( isDocker == null ) {
@@ -189,30 +173,33 @@ export async function addAllEnvClientMetadata(metadataDocument: LimitedSizeDocum
189173 }
190174 const isKubernetes = process . env . KUBERNETES_SERVICE_HOST ? true : false ;
191175
192- if ( isDocker || isKubernetes ) {
193- if ( isDocker ) {
194- containerMetadata [ 'runtime' ] = 'docker' ;
195- }
196- if ( isKubernetes ) {
197- containerMetadata [ 'orchestrator' ] = 'kubernetes' ;
198- }
199- }
176+ if ( isDocker ) containerMetadata [ 'runtime' ] = 'docker' ;
177+ if ( isKubernetes ) containerMetadata [ 'orchestrator' ] = 'kubernetes' ;
178+
200179 return containerMetadata ;
201180 }
202181
203182 const containerMetadata = await getContainerMetadata ( ) ;
204- const envMetadata = faasEnv ?? new Map ( ) ;
205- envMetadata . set ( 'container' , containerMetadata ) ;
206- if ( envMetadata != null ) {
207- if ( ! metadataDocument . ifItFitsItSits ( 'env' , envMetadata ) ) {
208- for ( const key of envMetadata . keys ( ) ) {
209- envMetadata . delete ( key ) ;
210- if ( envMetadata . size === 0 ) break ;
211- if ( metadataDocument . ifItFitsItSits ( 'env' , envMetadata ) ) break ;
183+ if ( Object . keys ( containerMetadata ) . length === 0 ) return originalMetadata ;
184+
185+ const extendedMetadata = new LimitedSizeDocument ( 512 ) ;
186+ const envMetadata = { ...originalMetadata ?. env , container : containerMetadata } ;
187+
188+ for ( const [ key , val ] of Object . entries ( originalMetadata ) ) {
189+ if ( key !== 'env' ) {
190+ extendedMetadata . ifItFitsItSits ( key , val ) ;
191+ } else {
192+ if ( ! extendedMetadata . ifItFitsItSits ( 'env' , envMetadata ) ) {
193+ extendedMetadata . ifItFitsItSits ( 'env' , val ) ;
212194 }
213195 }
214196 }
215- return metadataDocument ;
197+
198+ if ( ! ( 'env' in originalMetadata ) ) {
199+ extendedMetadata . ifItFitsItSits ( 'env' , envMetadata ) ;
200+ }
201+
202+ return extendedMetadata . toObject ( ) ;
216203}
217204
218205/**
0 commit comments