@@ -17,7 +17,6 @@ const (
1717 copilotAPIKeyURL = "https://api.github.com/copilot_internal/v2/token"
1818 copilotClientID = "Iv1.b507a08c87ecfe98"
1919 copilotScope = "read:user"
20- userAgent = "GitHubCopilotChat/0.26.7"
2120
2221 // Retry configuration
2322 maxRefreshRetries = 3
@@ -67,7 +66,7 @@ func authenticate(cfg *Config) error {
6766 }
6867 req .Header .Set ("Accept" , "application/json" )
6968 req .Header .Set ("Content-Type" , "application/json" )
70- req .Header .Set ("User-Agent" , userAgent )
69+ req .Header .Set ("User-Agent" , cfg . Headers . UserAgent )
7170
7271 body := fmt .Sprintf (`{"client_id":"%s","scope":"%s"}` , copilotClientID , copilotScope )
7372 req .Body = io .NopCloser (strings .NewReader (body ))
@@ -86,14 +85,14 @@ func authenticate(cfg *Config) error {
8685 fmt .Printf ("\n To authenticate, visit: %s\n Enter code: %s\n " , dc .VerificationURI , dc .UserCode )
8786
8887 // Step 2: Poll for GitHub token
89- githubToken , err := pollForGitHubToken (dc .DeviceCode , dc .Interval )
88+ githubToken , err := pollForGitHubToken (cfg , dc .DeviceCode , dc .Interval )
9089 if err != nil {
9190 return err
9291 }
9392 cfg .GitHubToken = githubToken
9493
9594 // Step 3: Exchange GitHub token for Copilot token
96- copilotToken , expiresAt , refreshIn , err := getCopilotToken (githubToken )
95+ copilotToken , expiresAt , refreshIn , err := getCopilotToken (cfg , githubToken )
9796 if err != nil {
9897 return err
9998 }
@@ -110,7 +109,7 @@ func authenticate(cfg *Config) error {
110109 return nil
111110}
112111
113- func pollForGitHubToken (deviceCode string , interval int ) (string , error ) {
112+ func pollForGitHubToken (cfg * Config , deviceCode string , interval int ) (string , error ) {
114113 for i := 0 ; i < 120 ; i ++ { // Poll for 2 minutes max
115114 time .Sleep (time .Duration (interval ) * time .Second )
116115
@@ -120,7 +119,7 @@ func pollForGitHubToken(deviceCode string, interval int) (string, error) {
120119 }
121120 req .Header .Set ("Accept" , "application/json" )
122121 req .Header .Set ("Content-Type" , "application/json" )
123- req .Header .Set ("User-Agent" , userAgent )
122+ req .Header .Set ("User-Agent" , cfg . Headers . UserAgent )
124123
125124 body := fmt .Sprintf (`{"client_id":"%s","device_code":"%s","grant_type":"urn:ietf:params:oauth:grant-type:device_code"}` ,
126125 copilotClientID , deviceCode )
@@ -150,13 +149,13 @@ func pollForGitHubToken(deviceCode string, interval int) (string, error) {
150149 return "" , fmt .Errorf ("authentication timed out" )
151150}
152151
153- func getCopilotToken (githubToken string ) (string , int64 , int64 , error ) {
152+ func getCopilotToken (cfg * Config , githubToken string ) (string , int64 , int64 , error ) {
154153 req , err := http .NewRequest ("GET" , copilotAPIKeyURL , nil )
155154 if err != nil {
156155 return "" , 0 , 0 , err
157156 }
158157 req .Header .Set ("Authorization" , "token " + githubToken )
159- req .Header .Set ("User-Agent" , userAgent )
158+ req .Header .Set ("User-Agent" , cfg . Headers . UserAgent )
160159
161160 resp , err := sharedHTTPClient .Do (req )
162161 if err != nil {
@@ -186,7 +185,7 @@ func refreshToken(cfg *Config) error {
186185 for attempt := 1 ; attempt <= maxRefreshRetries ; attempt ++ {
187186 log .Printf ("Attempting to refresh Copilot token (attempt %d/%d)" , attempt , maxRefreshRetries )
188187
189- copilotToken , expiresAt , refreshIn , err := getCopilotToken (cfg .GitHubToken )
188+ copilotToken , expiresAt , refreshIn , err := getCopilotToken (cfg , cfg .GitHubToken )
190189 if err != nil {
191190 if attempt == maxRefreshRetries {
192191 log .Printf ("Token refresh failed after %d attempts: %v" , maxRefreshRetries , err )
0 commit comments