alks
Version:
CLI for working with ALKS
50 lines (38 loc) • 1.34 kB
text/typescript
import { getAlks } from './getAlks';
import { getAuth } from './getAuth';
import { log } from './log';
import memoize from 'memoizee';
export interface GetAlksAccountRolePairsOptions {
iamOnly?: boolean;
}
async function _getAlksAccounts(options: GetAlksAccountRolePairsOptions = {}) {
log('refreshing alks accounts list');
const auth = await getAuth();
// load available account/roles
const alks = await getAlks({
...auth,
});
const alksAccounts = await alks.getAccounts();
// log the accounts, but truncate to show up to the first 10 accounts
let accountsToLog = alksAccounts.map((alksAccount) => alksAccount.account);
if (accountsToLog.length > 10) {
accountsToLog = accountsToLog
.slice(0, 10)
.concat(`... and ${accountsToLog.length - 10} more`);
}
log(`All accounts: [${accountsToLog.join(', ')}]`);
// Filter out non-iam-active accounts if iamOnly flag is passed
const filteredAlksAccounts = alksAccounts.filter(
(alksAccount) => !options.iamOnly || alksAccount.iamKeyActive
);
return filteredAlksAccounts;
}
const memoized = memoize(_getAlksAccounts, {
maxAge: 5000,
});
export async function getAlksAccounts(
options: GetAlksAccountRolePairsOptions = {}
) {
log('retreiving alks accounts');
return memoized(options) as ReturnType<typeof _getAlksAccounts>;
}