Skip to content

Commit 0cc9701

Browse files
authored
chore(credential-provider-imds): use arrow+async functions in fromContainerMetadata (#2142)
1 parent 98b65b9 commit 0cc9701

File tree

1 file changed

+33
-40
lines changed

1 file changed

+33
-40
lines changed

packages/credential-provider-imds/src/fromContainerMetadata.ts

+33-40
Original file line numberDiff line numberDiff line change
@@ -16,34 +16,33 @@ export const ENV_CMDS_AUTH_TOKEN = "AWS_CONTAINER_AUTHORIZATION_TOKEN";
1616
* Creates a credential provider that will source credentials from the ECS
1717
* Container Metadata Service
1818
*/
19-
export function fromContainerMetadata(init: RemoteProviderInit = {}): CredentialProvider {
19+
export const fromContainerMetadata = (init: RemoteProviderInit = {}): CredentialProvider => {
2020
const { timeout, maxRetries } = providerConfigFromInit(init);
21-
return () => {
22-
return getCmdsUri().then((url) =>
23-
retry(async () => {
24-
const credsResponse = JSON.parse(await requestFromEcsImds(timeout, url));
25-
if (!isImdsCredentials(credsResponse)) {
26-
throw new ProviderError("Invalid response received from instance metadata service.");
27-
}
28-
29-
return fromImdsCredentials(credsResponse);
30-
}, maxRetries)
31-
);
32-
};
33-
}
21+
return () =>
22+
retry(async () => {
23+
const requestOptions = await getCmdsUri();
24+
const credsResponse = JSON.parse(await requestFromEcsImds(timeout, requestOptions));
25+
if (!isImdsCredentials(credsResponse)) {
26+
throw new ProviderError("Invalid response received from instance metadata service.");
27+
}
28+
return fromImdsCredentials(credsResponse);
29+
}, maxRetries);
30+
};
3431

35-
function requestFromEcsImds(timeout: number, options: RequestOptions): Promise<string> {
32+
const requestFromEcsImds = async (timeout: number, options: RequestOptions): Promise<string> => {
3633
if (process.env[ENV_CMDS_AUTH_TOKEN]) {
37-
const { headers = {} } = options;
38-
headers.Authorization = process.env[ENV_CMDS_AUTH_TOKEN];
39-
options.headers = headers;
34+
options.headers = {
35+
...options.headers,
36+
Authorization: process.env[ENV_CMDS_AUTH_TOKEN],
37+
};
4038
}
4139

42-
return httpRequest({
40+
const buffer = await httpRequest({
4341
...options,
4442
timeout,
45-
}).then((buffer) => buffer.toString());
46-
}
43+
});
44+
return buffer.toString();
45+
};
4746

4847
const CMDS_IP = "169.254.170.2";
4948
const GREENGRASS_HOSTS = {
@@ -55,40 +54,34 @@ const GREENGRASS_PROTOCOLS = {
5554
"https:": true,
5655
};
5756

58-
function getCmdsUri(): Promise<RequestOptions> {
57+
const getCmdsUri = async (): Promise<RequestOptions> => {
5958
if (process.env[ENV_CMDS_RELATIVE_URI]) {
60-
return Promise.resolve({
59+
return {
6160
hostname: CMDS_IP,
6261
path: process.env[ENV_CMDS_RELATIVE_URI],
63-
});
62+
};
6463
}
6564

6665
if (process.env[ENV_CMDS_FULL_URI]) {
6766
const parsed = parse(process.env[ENV_CMDS_FULL_URI]!);
6867
if (!parsed.hostname || !(parsed.hostname in GREENGRASS_HOSTS)) {
69-
return Promise.reject(
70-
new ProviderError(`${parsed.hostname} is not a valid container metadata service hostname`, false)
71-
);
68+
throw new ProviderError(`${parsed.hostname} is not a valid container metadata service hostname`, false);
7269
}
7370

7471
if (!parsed.protocol || !(parsed.protocol in GREENGRASS_PROTOCOLS)) {
75-
return Promise.reject(
76-
new ProviderError(`${parsed.protocol} is not a valid container metadata service protocol`, false)
77-
);
72+
throw new ProviderError(`${parsed.protocol} is not a valid container metadata service protocol`, false);
7873
}
7974

80-
return Promise.resolve({
75+
return {
8176
...parsed,
8277
port: parsed.port ? parseInt(parsed.port, 10) : undefined,
83-
});
78+
};
8479
}
8580

86-
return Promise.reject(
87-
new ProviderError(
88-
"The container metadata credential provider cannot be used unless" +
89-
` the ${ENV_CMDS_RELATIVE_URI} or ${ENV_CMDS_FULL_URI} environment` +
90-
" variable is set",
91-
false
92-
)
81+
throw new ProviderError(
82+
"The container metadata credential provider cannot be used unless" +
83+
` the ${ENV_CMDS_RELATIVE_URI} or ${ENV_CMDS_FULL_URI} environment` +
84+
" variable is set",
85+
false
9386
);
94-
}
87+
};

0 commit comments

Comments
 (0)