]> git.giacomolli.uk - onechat/blobdiff - chatgpt.go
Add local context to chat operation failures
[onechat] / chatgpt.go
index 77481905822674f27c9bc4bd888933d046514c51..49be0150264f31dfdabc28b4c0626a54ac71f8e3 100644 (file)
@@ -116,14 +116,14 @@ func (a *ChatGPTAuth) Authorize(ctx context.Context, header http.Header) error {
 
        tokens, err := a.read()
        if err != nil {
-               return err
+               return fmt.Errorf("read login tokens: %w", err)
        }
 
        expiry, found := chatgptTokenExpiry(tokens.AccessToken)
        if !found || !time.Now().Before(expiry.Add(-chatgptRefreshMargin)) {
                tokens, err = a.refresh(ctx, tokens)
                if err != nil {
-                       return err
+                       return fmt.Errorf("refresh login tokens: %w", err)
                }
        }
 
@@ -184,7 +184,7 @@ func (a *ChatGPTAuth) refresh(ctx context.Context, tokens ChatGPTTokenFile) (Cha
 
        err = a.write(tokens)
        if err != nil {
-               return ChatGPTTokenFile{}, err
+               return ChatGPTTokenFile{}, fmt.Errorf("save refreshed tokens: %w", err)
        }
 
        return tokens, nil
@@ -199,8 +199,11 @@ func (a *ChatGPTAuth) postJSON(ctx context.Context, path string, body, result an
        }
 
        _, err = a.post(ctx, path, "application/json", data, result)
+       if err != nil {
+               return fmt.Errorf("post JSON request: %w", err)
+       }
 
-       return err
+       return nil
 }
 
 // write replaces the token file atomically. The file has mode 0600.
@@ -278,17 +281,17 @@ func (a *ChatGPTAuth) Login(ctx context.Context, out io.Writer) error {
 
        grant, err := a.poll(ctx, code.DeviceAuthID, userCode, chatgptPollInterval(code.Interval))
        if err != nil {
-               return err
+               return fmt.Errorf("wait for device grant: %w", err)
        }
 
        tokens, err := a.exchange(ctx, grant)
        if err != nil {
-               return err
+               return fmt.Errorf("exchange device grant: %w", err)
        }
 
        err = a.write(tokens)
        if err != nil {
-               return err
+               return fmt.Errorf("save login tokens: %w", err)
        }
 
        _, err = fmt.Fprintln(out, "Logged in.")
@@ -443,12 +446,12 @@ func chatgptDecodeClaims(token string, claims any) bool {
 func chatgptLogin(ctx context.Context, out io.Writer) (err error) {
        dir, err := dataDir()
        if err != nil {
-               return err
+               return fmt.Errorf("find data directory: %w", err)
        }
 
        tokens, err := lockTokens(dir)
        if err != nil {
-               return err
+               return fmt.Errorf("lock login tokens: %w", err)
        }
 
        defer func() {