]> git.giacomolli.uk - onechat/blobdiff - chatgpt.go
Queue external data for the next root turn
[onechat] / chatgpt.go
index 77481905822674f27c9bc4bd888933d046514c51..a5d9ee3c75d508b25f549636af6b07bb728cc5e9 100644 (file)
@@ -116,14 +116,14 @@ func (a *ChatGPTAuth) Authorize(ctx context.Context, header http.Header) error {
 
        tokens, err := a.read()
        if err != nil {
 
        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 {
        }
 
        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 {
 
        err = a.write(tokens)
        if err != nil {
-               return ChatGPTTokenFile{}, err
+               return ChatGPTTokenFile{}, fmt.Errorf("save refreshed tokens: %w", err)
        }
 
        return tokens, nil
        }
 
        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)
        }
 
        _, 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.
 }
 
 // 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 {
 
        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 {
        }
 
        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 {
        }
 
        err = a.write(tokens)
        if err != nil {
-               return err
+               return fmt.Errorf("save login tokens: %w", err)
        }
 
        _, err = fmt.Fprintln(out, "Logged in.")
        }
 
        _, err = fmt.Fprintln(out, "Logged in.")
@@ -443,17 +446,22 @@ func chatgptDecodeClaims(token string, claims any) bool {
 func chatgptLogin(ctx context.Context, out io.Writer) (err error) {
        dir, err := dataDir()
        if err != nil {
 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 {
        }
 
        tokens, err := lockTokens(dir)
        if err != nil {
-               return err
+               return fmt.Errorf("lock login tokens: %w", err)
        }
 
        defer func() {
                err = errors.Join(err, tokens.Close())
        }()
 
        }
 
        defer func() {
                err = errors.Join(err, tokens.Close())
        }()
 
-       return newChatGPTAuth(filepath.Join(dir, chatgptTokenFileName), chatgptIssuer).Login(ctx, out)
+       err = newChatGPTAuth(filepath.Join(dir, chatgptTokenFileName), chatgptIssuer).Login(ctx, out)
+       if err != nil {
+               return fmt.Errorf("complete device login: %w", err)
+       }
+
+       return nil
 }
 }