atrium_api/agent/atp_agent/
store.rs

1use super::AtpSession;
2use crate::agent::AuthorizationProvider;
3use atrium_common::store::{memory::MemoryStore, Store};
4use atrium_xrpc::types::AuthorizationToken;
5
6#[cfg_attr(not(target_arch = "wasm32"), trait_variant::make(Send))]
7pub trait AtpSessionStore: Store<(), AtpSession> + AuthorizationProvider {}
8
9pub type MemorySessionStore = MemoryStore<(), AtpSession>;
10
11impl AtpSessionStore for MemorySessionStore {}
12
13impl AuthorizationProvider for MemorySessionStore {
14    async fn authorization_token(&self, is_refresh: bool) -> Option<AuthorizationToken> {
15        self.get(&())
16            .await
17            .ok()
18            .flatten()
19            .map(
20                |session| {
21                    if is_refresh {
22                        session.refresh_jwt.clone()
23                    } else {
24                        session.access_jwt.clone()
25                    }
26                },
27            )
28            .map(AuthorizationToken::Bearer)
29    }
30}