//! Gemini adapter — talks to `gemini.google.com`'s internal web API
//! using cookies from a signed-in session. No Chrome, no DOM scraping.
//!
//! Uses your Google One AI Premium / Advanced subscription (whatever
//! your logged-in browser account has).
//!
//! ## Typical use
//!
//! ```no_run
//! # async fn demo() -> Result<(), tail_fin_common::TailFinError> {
//! use std::path::Path;
//! use tail_fin_gemini::GeminiClient;
//!
//! let client = GeminiClient::from_cookie_file(Path::new("~/.tail-fin/gemini-cookies.txt"))?;
//! let reply = client.ask("Hello Gemini", None).await?;
//! println!("{}", reply.response);
//! # Ok(())
//! # }
//! ```

pub mod client;
pub mod cookies;
pub mod parsing;
pub mod signing;
pub mod types;

pub use client::GeminiClient;
pub use cookies::{load_netscape, Cookies};
pub use parsing::{extract_push_id, extract_response_text, extract_snlm0e, SessionTokens};
pub use signing::{build_sapisidhash, current_sapisidhash, ORIGIN};
pub use types::GeminiResponse;
