@@ -14,6 +14,7 @@ import {
14
14
} from "./observableApiConfig.js" ;
15
15
import type { TtyEffects } from "./tty.js" ;
16
16
import { bold , defaultEffects as defaultTtyEffects , inverse , link , yellow } from "./tty.js" ;
17
+ import { Telemetry } from "./telemetry.js" ;
17
18
18
19
const OBSERVABLE_UI_ORIGIN = getObservableUiOrigin ( ) ;
19
20
@@ -36,6 +37,7 @@ export const defaultEffects: AuthEffects = {
36
37
37
38
export async function login ( effects : AuthEffects = defaultEffects ) {
38
39
const { clack} = effects ;
40
+ Telemetry . record ( { event : "login" , step : "start" } ) ;
39
41
clack . intro ( inverse ( " observable login " ) ) ;
40
42
41
43
const { currentUser} = await loginInner ( effects ) ;
@@ -52,8 +54,7 @@ export async function login(effects: AuthEffects = defaultEffects) {
52
54
) ;
53
55
}
54
56
clack . outro ( "Logged in" ) ;
55
-
56
- clack . outro ( ) ;
57
+ Telemetry . record ( { event : "login" , step : "finish" } ) ;
57
58
}
58
59
59
60
export async function loginInner ( effects : AuthEffects ) : Promise < { currentUser : GetCurrentUserResponse ; apiKey : ApiKey } > {
@@ -75,6 +76,7 @@ export async function loginInner(effects: AuthEffects): Promise<{currentUser: Ge
75
76
76
77
let apiKey : PostAuthRequestPollResponse [ "apiKey" ] | null = null ;
77
78
while ( apiKey === null ) {
79
+ await new Promise ( ( resolve ) => setTimeout ( resolve , 1000 ) ) ;
78
80
const requestPoll = await apiClient . postAuthRequestPoll ( requestInfo . id ) ;
79
81
switch ( requestPoll . status ) {
80
82
case "pending" :
@@ -84,18 +86,23 @@ export async function loginInner(effects: AuthEffects): Promise<{currentUser: Ge
84
86
break ;
85
87
case "expired" :
86
88
spinner . stop ( "Failed to confirm code." , 2 ) ;
89
+ Telemetry . record ( { event : "login" , step : "error" , code : "expired" } ) ;
87
90
throw new CliError ( "That confirmation code expired." ) ;
88
91
case "consumed" :
89
92
spinner . stop ( "Failed to confirm code." , 2 ) ;
93
+ Telemetry . record ( { event : "login" , step : "error" , code : "consumed" } ) ;
90
94
throw new CliError ( "That confirmation code has already been used." ) ;
91
95
default :
92
96
spinner . stop ( "Failed to confirm code." , 2 ) ;
97
+ Telemetry . record ( { event : "login" , step : "error" , code : `unknown-${ requestPoll . status } ` } ) ;
93
98
throw new CliError ( `Received an unknown polling status ${ requestPoll . status } .` ) ;
94
99
}
95
- await new Promise ( ( resolve ) => setTimeout ( resolve , 1000 ) ) ;
96
100
}
97
101
98
- if ( ! apiKey ) throw new CliError ( "No API key returned from server." ) ;
102
+ if ( ! apiKey ) {
103
+ Telemetry . record ( { event : "login" , step : "error" , code : "no-key" } ) ;
104
+ throw new CliError ( "No API key returned from server." ) ;
105
+ }
99
106
await effects . setObservableApiKey ( apiKey ) ;
100
107
101
108
apiClient . setApiKey ( { source : "login" , key : apiKey . key } ) ;
0 commit comments