11import Fuse from "fuse.js" ;
2+ import chalk from "chalk" ;
23import inquirer from "inquirer" ;
34import autocomplete from "inquirer-autocomplete-prompt" ;
45import { buildError } from "./error.js" ;
@@ -9,40 +10,50 @@ prompt.registerPrompt("autocomplete", autocomplete);
910
1011export const chooseAccount = async ( accessToken , region ) => {
1112 const accounts = await getAccounts ( accessToken , createAWSClient ( region ) ) ;
12- const fuse = new Fuse ( accounts , { threshold : 0.4 , keys : [ "accountName" ] } ) ;
13- const answer = await prompt ( {
14- type : "autocomplete" ,
15- name : "account" ,
16- message : "Select the AWS account you want to authenticate with:" ,
17- pageSize : 20 ,
18- source : ( result , input ) => {
19- return input
20- ? fuse
21- . search ( input )
22- . map ( ( result ) => `${ result . item . accountName } (${ result . item . accountId } )` )
23- : accounts . map ( ( account ) => `${ account . accountName } (${ account . accountId } )` ) ;
24- } ,
25- } ) ;
26- return accounts . find (
27- ( account ) => `${ account . accountName } (${ account . accountId } )` === answer . account
28- ) ;
13+ if ( accounts . length === 1 ) {
14+ console . error ( chalk . green ( "Defaulting to only available account:" , accounts [ 0 ] . accountName ) ) ;
15+ return accounts [ 0 ] ;
16+ } else {
17+ const fuse = new Fuse ( accounts , { threshold : 0.4 , keys : [ "accountName" ] } ) ;
18+ const answer = await prompt ( {
19+ type : "autocomplete" ,
20+ name : "account" ,
21+ message : "Select the AWS account you want to authenticate with:" ,
22+ pageSize : 20 ,
23+ source : ( result , input ) => {
24+ return input
25+ ? fuse
26+ . search ( input )
27+ . map ( ( result ) => `${ result . item . accountName } (${ result . item . accountId } )` )
28+ : accounts . map ( ( account ) => `${ account . accountName } (${ account . accountId } )` ) ;
29+ } ,
30+ } ) ;
31+ return accounts . find (
32+ ( account ) => `${ account . accountName } (${ account . accountId } )` === answer . account
33+ ) ;
34+ }
2935} ;
3036
3137export const chooseRole = async ( accessToken , accountId , region ) => {
3238 const roles = await getAccountRoles ( accessToken , accountId , createAWSClient ( region ) ) ;
33- const fuse = new Fuse ( roles , { threshold : 0.4 , keys : [ "roleName" ] } ) ;
34- const answer = await prompt ( {
35- type : "autocomplete" ,
36- name : "roleName" ,
37- message : "Select the account role you wish to assume:" ,
38- pageSize : 20 ,
39- source : ( result , input ) => {
40- return input
41- ? fuse . search ( input ) . map ( ( result ) => result . item . roleName )
42- : roles . map ( ( role ) => role . roleName ) ;
43- } ,
44- } ) ;
45- return roles . find ( ( role ) => role . roleName === answer . roleName ) ;
39+ if ( roles . length === 1 ) {
40+ console . error ( chalk . green ( "Defaulting to only available role:" , roles [ 0 ] . roleName ) ) ;
41+ return roles [ 0 ] ;
42+ } else {
43+ const fuse = new Fuse ( roles , { threshold : 0.4 , keys : [ "roleName" ] } ) ;
44+ const answer = await prompt ( {
45+ type : "autocomplete" ,
46+ name : "roleName" ,
47+ message : "Select the account role you wish to assume:" ,
48+ pageSize : 20 ,
49+ source : ( result , input ) => {
50+ return input
51+ ? fuse . search ( input ) . map ( ( result ) => result . item . roleName )
52+ : roles . map ( ( role ) => role . roleName ) ;
53+ } ,
54+ } ) ;
55+ return roles . find ( ( role ) => role . roleName === answer . roleName ) ;
56+ }
4657} ;
4758
4859export const findAccountByName = async ( accessToken , accountName , region ) => {
0 commit comments