A better Rust ATProto crate

oversight in session persistence

Orual 40c7d5ab 2ff4604b

Changed files
+7 -1
crates
jacquard-oauth
src
+7 -1
crates/jacquard-oauth/src/client.rs
··· 204 204 } 205 205 206 206 async fn create_session(&self, data: ClientSessionData<'_>) -> Result<OAuthSession<T, S>> { 207 + self.registry.set(data.clone()).await?; 207 208 Ok(OAuthSession::new( 208 209 self.registry.clone(), 209 210 self.client.clone(), ··· 336 337 let refreshed = self.registry.as_ref().get(&did, &sid, true).await?; 337 338 let token = AuthorizationToken::Dpop(refreshed.token_set.access_token.clone()); 338 339 // Write back updated session 339 - *self.data.write().await = refreshed.into_static(); 340 + *self.data.write().await = refreshed.clone().into_static(); 341 + // Store in the registry 342 + self.registry.set(refreshed).await?; 340 343 Ok(token) 341 344 } 342 345 } ··· 390 393 .send(build_http_request(&base_uri, request, &opts)?) 391 394 .await 392 395 .map_err(|e| TransportError::Other(Box::new(e)))?; 396 + drop(guard); 393 397 let res = process_response(http_response); 394 398 if is_invalid_token_response(&res) { 395 399 opts.auth = Some( ··· 397 401 .await 398 402 .map_err(|e| ClientError::Transport(TransportError::Other(e.into())))?, 399 403 ); 404 + let guard = self.data.read().await; 405 + let mut dpop = guard.dpop_data.clone(); 400 406 let http_response = self 401 407 .client 402 408 .dpop_call(&mut dpop)