atrium-api 0.25.8

API library for AT Protocol (Bluesky)
Documentation
use super::AtpSession;
use crate::agent::AuthorizationProvider;
use atrium_common::store::{Store, memory::MemoryStore};
use atrium_xrpc::types::AuthorizationToken;

#[cfg_attr(not(target_arch = "wasm32"), trait_variant::make(Send))]
pub trait AtpSessionStore: Store<(), AtpSession> + AuthorizationProvider {}

pub type MemorySessionStore = MemoryStore<(), AtpSession>;

impl AtpSessionStore for MemorySessionStore {}

impl AuthorizationProvider for MemorySessionStore {
    async fn authorization_token(&self, is_refresh: bool) -> Option<AuthorizationToken> {
        self.get(&())
            .await
            .ok()
            .flatten()
            .map(
                |session| {
                    if is_refresh {
                        session.refresh_jwt.clone()
                    } else {
                        session.access_jwt.clone()
                    }
                },
            )
            .map(AuthorizationToken::Bearer)
    }
}