Function: eca-providers--handle-login-response

eca-providers--handle-login-response is a natively compiled function defined in eca-providers.el.

Signature

(eca-providers--handle-login-response SESSION PROVIDER-ID RESULT)

Documentation

Handle login RESULT for PROVIDER-ID from SESSION.

Source Code

;; Defined in /nix/store/jklqzw6pzz6j4jrbv8wy0iwgi7jlrbld-emacs-packages-deps/share/emacs/site-lisp/elpa/eca-20260928.1827/eca-providers.el
(defun eca-providers--handle-login-response (session provider-id result)
  "Handle login RESULT for PROVIDER-ID from SESSION."
  (pcase (plist-get result :action)
    ("choose-method"
     (let* ((methods (append (plist-get result :methods) nil))
            (choices (mapcar (lambda (m)
                              (cons (plist-get m :label)
                                    (plist-get m :key)))
                            methods))
            (selected (completing-read "Login method: " choices nil t)))
       (when-let* ((method (cdr (assoc selected choices))))
         (eca-providers--do-login session provider-id method))))
    ("input"
     (let ((data (eca-providers--collect-fields
                  (append (plist-get result :fields) nil))))
       (eca-api-request-async session
         :method "providers/loginInput"
         :params (list :provider provider-id :data data)
         :success-callback (lambda (_) (eca-info "Login complete"))
         :error-callback (lambda (err) (eca-warn "Login failed: %s" err)))))
    ("authorize"
     (let ((url (plist-get result :url))
           (fields (plist-get result :fields))
           (msg (plist-get result :message)))
       (browse-url url)
       (if fields
           ;; Browser auth + code paste (e.g. Anthropic)
           (let ((data (eca-providers--collect-fields (append fields nil))))
             (eca-api-request-async session
               :method "providers/loginInput"
               :params (list :provider provider-id :data data)
               :success-callback (lambda (_) (eca-info "Login complete"))
               :error-callback (lambda (err) (eca-warn "Login failed: %s" err))))
         ;; Auto-callback (e.g. OpenAI) — wait for providers/updated
         (eca-info "%s" (or msg "Completing authentication in browser...")))))
    ("device-code"
     (let ((url (plist-get result :url))
           (code (plist-get result :code))
           (msg (plist-get result :message)))
       (kill-new code)
       (browse-url url)
       (eca-info "Code %s copied to clipboard. %s" code (or msg ""))))
    ("done"
     (eca-info "Login complete"))))