@@ -16,34 +16,33 @@ export const ENV_CMDS_AUTH_TOKEN = "AWS_CONTAINER_AUTHORIZATION_TOKEN";
16
16
* Creates a credential provider that will source credentials from the ECS
17
17
* Container Metadata Service
18
18
*/
19
- export function fromContainerMetadata ( init : RemoteProviderInit = { } ) : CredentialProvider {
19
+ export const fromContainerMetadata = ( init : RemoteProviderInit = { } ) : CredentialProvider => {
20
20
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
+ } ;
34
31
35
- function requestFromEcsImds ( timeout : number , options : RequestOptions ) : Promise < string > {
32
+ const requestFromEcsImds = async ( timeout : number , options : RequestOptions ) : Promise < string > = > {
36
33
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
+ } ;
40
38
}
41
39
42
- return httpRequest ( {
40
+ const buffer = await httpRequest ( {
43
41
...options ,
44
42
timeout,
45
- } ) . then ( ( buffer ) => buffer . toString ( ) ) ;
46
- }
43
+ } ) ;
44
+ return buffer . toString ( ) ;
45
+ } ;
47
46
48
47
const CMDS_IP = "169.254.170.2" ;
49
48
const GREENGRASS_HOSTS = {
@@ -55,40 +54,34 @@ const GREENGRASS_PROTOCOLS = {
55
54
"https:" : true ,
56
55
} ;
57
56
58
- function getCmdsUri ( ) : Promise < RequestOptions > {
57
+ const getCmdsUri = async ( ) : Promise < RequestOptions > = > {
59
58
if ( process . env [ ENV_CMDS_RELATIVE_URI ] ) {
60
- return Promise . resolve ( {
59
+ return {
61
60
hostname : CMDS_IP ,
62
61
path : process . env [ ENV_CMDS_RELATIVE_URI ] ,
63
- } ) ;
62
+ } ;
64
63
}
65
64
66
65
if ( process . env [ ENV_CMDS_FULL_URI ] ) {
67
66
const parsed = parse ( process . env [ ENV_CMDS_FULL_URI ] ! ) ;
68
67
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 ) ;
72
69
}
73
70
74
71
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 ) ;
78
73
}
79
74
80
- return Promise . resolve ( {
75
+ return {
81
76
...parsed ,
82
77
port : parsed . port ? parseInt ( parsed . port , 10 ) : undefined ,
83
- } ) ;
78
+ } ;
84
79
}
85
80
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
93
86
) ;
94
- }
87
+ } ;
0 commit comments