Skip to content

Commit ff375e9

Browse files
fix(NODE-4830): lazily import aws module (#3476)
1 parent c4c560c commit ff375e9

File tree

2 files changed

+19
-13
lines changed

2 files changed

+19
-13
lines changed

src/cmap/auth/mongodb_aws.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import * as url from 'url';
44

55
import type { Binary, BSONSerializeOptions } from '../../bson';
66
import * as BSON from '../../bson';
7-
import { aws4, credentialProvider } from '../../deps';
7+
import { aws4, getAwsCredentialProvider } from '../../deps';
88
import {
99
MongoAWSError,
1010
MongoCompatibilityError,
@@ -198,6 +198,8 @@ function makeTempCredentials(credentials: MongoCredentials, callback: Callback<M
198198
);
199199
}
200200

201+
const credentialProvider = getAwsCredentialProvider();
202+
201203
// Check if the AWS credential provider from the SDK is present. If not,
202204
// use the old method.
203205
if ('kModuleError' in credentialProvider) {

src/deps.ts

+16-12
Original file line numberDiff line numberDiff line change
@@ -72,18 +72,22 @@ type CredentialProvider = {
7272
fromNodeProviderChain(this: void): () => Promise<AWSCredentials>;
7373
};
7474

75-
export let credentialProvider: CredentialProvider | { kModuleError: MongoMissingDependencyError } =
76-
makeErrorModule(
77-
new MongoMissingDependencyError(
78-
'Optional module `@aws-sdk/credential-providers` not found.' +
79-
' Please install it to enable getting aws credentials via the official sdk.'
80-
)
81-
);
82-
83-
try {
84-
// Ensure you always wrap an optional require in the try block NODE-3199
85-
credentialProvider = require('@aws-sdk/credential-providers');
86-
} catch {} // eslint-disable-line
75+
export function getAwsCredentialProvider():
76+
| CredentialProvider
77+
| { kModuleError: MongoMissingDependencyError } {
78+
try {
79+
// Ensure you always wrap an optional require in the try block NODE-3199
80+
const credentialProvider = require('@aws-sdk/credential-providers');
81+
return credentialProvider;
82+
} catch {
83+
return makeErrorModule(
84+
new MongoMissingDependencyError(
85+
'Optional module `@aws-sdk/credential-providers` not found.' +
86+
' Please install it to enable getting aws credentials via the official sdk.'
87+
)
88+
);
89+
}
90+
}
8791

8892
type SnappyLib = {
8993
[PKG_VERSION]: { major: number; minor: number; patch: number };

0 commit comments

Comments
 (0)