tangled-cli 0.1.0

CLI for interacting with Tangled, an AT Protocol-based git collaboration platform
//! Session creation and refresh against the PDS.

use anyhow::Result;
use tangled_api::lexicon::com::atproto::server;
use tangled_config::session::Session;

pub async fn login_with_password(
    pds_base: &str,
    handle: &str,
    password: &str,
) -> Result<Session> {
    let input = server::create_session::Input {
        identifier: handle.to_string(),
        password: password.to_string(),
        ..Default::default()
    };
    let rb = server::create_session(super::http(), pds_base, &input);
    let out: server::create_session::Output = super::xrpc_send(rb).await?;
    Ok(Session {
        access_jwt: out.access_jwt,
        refresh_jwt: out.refresh_jwt,
        did: out.did,
        handle: out.handle,
        ..Default::default()
    })
}

pub async fn refresh_session(
    pds_base: &str,
    refresh_jwt: &str,
) -> Result<Session> {
    let rb = server::refresh_session(super::http(), pds_base)
        .bearer_auth(refresh_jwt);
    let out: server::refresh_session::Output = super::xrpc_send(rb).await?;
    Ok(Session {
        access_jwt: out.access_jwt,
        refresh_jwt: out.refresh_jwt,
        did: out.did,
        handle: out.handle,
        ..Default::default()
    })
}