···245245 let password: String = match args.password.take() { Some(p) => p, None => Password::new().with_prompt("Password").interact()? };
246246 let pds = args.pds.unwrap_or_else(|| "https://bsky.social".to_string());
247247 let client = tangled_api::TangledClient::new(&pds);
248248- let session = client.login_with_password(&handle, &password, &pds).await?;
248248+ let mut session = match client.login_with_password(&handle, &password, &pds).await {
249249+ Ok(sess) => sess,
250250+ Err(e) => {
251251+ println!("\x1b[93mIf you're on your own PDS, make sure to pass the --pds flag\x1b[0m");
252252+ return Err(e);
253253+ }
254254+ };
249255 SessionManager::default().save(&session)?;
250256 println!("Logged in as '{}' ({})", session.handle, session.did);
251257 Ok(())
···314320315321- `tangled auth login`:
316322 - Prompts or uses flags; successful call saves session and prints `Logged in as ...`.
317317- - On failure, shows HTTP status and short message.
323323+ - On failure, shows HTTP status and error message, plus helpful hint about --pds flag for users on their own PDS.
318324- `tangled auth status`:
319325 - Shows handle + did if session exists; otherwise says not logged in.
320326- `tangled auth logout`:
+7-1
crates/tangled-cli/src/commands/auth.rs
···2626 .unwrap_or_else(|| "https://bsky.social".to_string());
27272828 let client = tangled_api::TangledClient::new(&pds);
2929- let mut session = client.login_with_password(&handle, &password, &pds).await?;
2929+ let mut session = match client.login_with_password(&handle, &password, &pds).await {
3030+ Ok(sess) => sess,
3131+ Err(e) => {
3232+ println!("\x1b[93mIf you're on your own PDS, make sure to pass the --pds flag\x1b[0m");
3333+ return Err(e);
3434+ }
3535+ };
3036 session.pds = Some(pds.clone());
3137 SessionManager::default().save(&session)?;
3238 println!("Logged in as '{}' ({})", session.handle, session.did);