33 lines
		
	
	
		
			997 B
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			33 lines
		
	
	
		
			997 B
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import { formatObjKey } from './formatObjKey';
 | 
						|
 | 
						|
export async function setSTSToken(this: any) {
 | 
						|
  if (!this.options) this.options = {};
 | 
						|
 | 
						|
  const now = new Date();
 | 
						|
  if (this.stsTokenFreshTime) {
 | 
						|
    if (+now - this.stsTokenFreshTime >= this.options.refreshSTSTokenInterval) {
 | 
						|
      this.stsTokenFreshTime = now;
 | 
						|
      let credentials = await this.options.refreshSTSToken();
 | 
						|
      credentials = formatObjKey(credentials, 'firstLowerCase');
 | 
						|
      if (credentials.securityToken) {
 | 
						|
        credentials.stsToken = credentials.securityToken;
 | 
						|
      }
 | 
						|
      checkCredentials(credentials);
 | 
						|
      Object.assign(this.options, credentials);
 | 
						|
    }
 | 
						|
  } else {
 | 
						|
    this.stsTokenFreshTime = now;
 | 
						|
  }
 | 
						|
  return null;
 | 
						|
}
 | 
						|
 | 
						|
export function checkCredentials(obj) {
 | 
						|
  const stsTokenKey = ['accessKeySecret', 'accessKeyId', 'stsToken'];
 | 
						|
  const objKeys = Object.keys(obj);
 | 
						|
  stsTokenKey.forEach(_ => {
 | 
						|
    if (!objKeys.find(key => key === _)) {
 | 
						|
      throw Error(`refreshSTSToken must return contains ${_}`);
 | 
						|
    }
 | 
						|
  });
 | 
						|
}
 |