@@ -11,6 +11,7 @@ import (
1111
1212 nylasadapter "github.com/nylas/cli/internal/adapters/nylas"
1313 "github.com/nylas/cli/internal/cli/common"
14+ "github.com/nylas/cli/internal/cli/setup"
1415 "github.com/nylas/cli/internal/domain"
1516)
1617
@@ -222,113 +223,53 @@ The CLI only requires your API Key - Client ID is auto-detected.`,
222223 fmt .Println ()
223224 fmt .Println ("Checking for existing grants..." )
224225
225- client := nylasadapter .NewHTTPClient ()
226- client .SetRegion (region )
227- client .SetCredentials (clientID , "" , apiKey )
228-
229- ctx , cancel := common .CreateContext ()
230- defer cancel ()
231-
232- grants , err := client .ListGrants (ctx )
226+ grantStore , err := createGrantStore ()
233227 if err != nil {
234- _ , _ = common .Yellow .Printf (" Could not fetch grants: %v\n " , err )
235- fmt .Println ()
236- fmt .Println ("Next steps:" )
237- fmt .Println (" nylas auth login Authenticate with your email provider" )
228+ _ , _ = common .Yellow .Printf (" Could not access grant store: %v\n " , err )
238229 return nil
239230 }
240231
241- if len (grants ) == 0 {
242- fmt .Println (" No existing grants found" )
232+ result , err := setup .SyncGrants (grantStore , apiKey , clientID , region )
233+ if err != nil {
234+ _ , _ = common .Yellow .Printf (" Could not fetch grants: %v\n " , err )
243235 fmt .Println ()
244236 fmt .Println ("Next steps:" )
245237 fmt .Println (" nylas auth login Authenticate with your email provider" )
246238 return nil
247239 }
248240
249- // Get grant store to save grants locally
250- grantStore , err := createGrantStore ()
251- if err != nil {
252- _ , _ = common .Yellow .Printf (" Could not save grants locally: %v\n " , err )
253- return nil
254- }
255-
256- // First pass: Add all valid grants without setting default
257- var validGrants []domain.Grant
258- for _ , grant := range grants {
259- if ! grant .IsValid () {
260- continue
261- }
262-
263- grantInfo := domain.GrantInfo {
264- ID : grant .ID ,
265- Email : grant .Email ,
266- Provider : grant .Provider ,
267- }
268-
269- if err := grantStore .SaveGrant (grantInfo ); err != nil {
270- continue
271- }
272-
273- validGrants = append (validGrants , grant )
274- _ , _ = common .Green .Printf (" ✓ Added %s (%s)\n " , grant .Email , grant .Provider .DisplayName ())
275- }
276-
277- if len (validGrants ) == 0 {
241+ if len (result .ValidGrants ) == 0 {
278242 fmt .Println (" No valid grants found" )
279243 fmt .Println ()
280244 fmt .Println ("Next steps:" )
281245 fmt .Println (" nylas auth login Authenticate with your email provider" )
282246 return nil
283247 }
284248
285- // Second pass: Set default grant
286- var defaultGrantID string
287- if len (validGrants ) == 1 {
288- // Single grant - auto-select as default
289- defaultGrantID = validGrants [0 ].ID
290- _ = grantStore .SetDefaultGrant (defaultGrantID )
249+ // Set default grant
250+ defaultGrantID := result .DefaultGrantID
251+ if defaultGrantID != "" {
252+ // Single grant, auto-selected
291253 fmt .Println ()
292- _ , _ = common .Green .Printf ("✓ Set %s as default account\n " , validGrants [0 ].Email )
293- } else {
294- // Multiple grants - let user choose default
295- fmt .Println ()
296- fmt .Println ("Select default account:" )
297- for i , grant := range validGrants {
298- fmt .Printf (" [%d] %s (%s)\n " , i + 1 , grant .Email , grant .Provider .DisplayName ())
299- }
300- fmt .Println ()
301- fmt .Print ("Select default account (1-" , len (validGrants ), "): " )
302- input , _ := reader .ReadString ('\n' )
303- choice := strings .TrimSpace (input )
304-
305- var selected int
306- if _ , err := fmt .Sscanf (choice , "%d" , & selected ); err != nil || selected < 1 || selected > len (validGrants ) {
307- // If invalid selection, default to first
308- _ , _ = common .Yellow .Printf ("Invalid selection, defaulting to %s\n " , validGrants [0 ].Email )
309- defaultGrantID = validGrants [0 ].ID
310- } else {
311- defaultGrantID = validGrants [selected - 1 ].ID
312- }
313-
314- _ = grantStore .SetDefaultGrant (defaultGrantID )
315- selectedGrant := validGrants [0 ]
316- for _ , g := range validGrants {
254+ _ , _ = common .Green .Printf ("✓ Set %s as default account\n " , result .ValidGrants [0 ].Email )
255+ } else if len (result .ValidGrants ) > 1 {
256+ // Multiple grants, prompt
257+ defaultGrantID , _ = setup .PromptDefaultGrant (grantStore , result .ValidGrants )
258+ for _ , g := range result .ValidGrants {
317259 if g .ID == defaultGrantID {
318- selectedGrant = g
260+ _ , _ = common . Green . Printf ( "✓ Set %s as default account \n " , g . Email )
319261 break
320262 }
321263 }
322- _ , _ = common .Green .Printf ("✓ Set %s as default account\n " , selectedGrant .Email )
323264 }
324265
325266 fmt .Println ()
326- fmt .Printf ("Added %d grant(s). Run 'nylas auth list' to see all accounts.\n " , len (validGrants ))
267+ fmt .Printf ("Added %d grant(s). Run 'nylas auth list' to see all accounts.\n " , len (result . ValidGrants ))
327268
328269 // Update config file with default grant and grants list
329270 cfg .DefaultGrant = defaultGrantID
330- cfg .Grants = make ([]domain.GrantInfo , len (validGrants ))
331- for i , grant := range validGrants {
271+ cfg .Grants = make ([]domain.GrantInfo , len (result . ValidGrants ))
272+ for i , grant := range result . ValidGrants {
332273 cfg .Grants [i ] = domain.GrantInfo {
333274 ID : grant .ID ,
334275 Email : grant .Email ,
0 commit comments