diff --git a/crates/desktop/tauri-artcraft/src/state/sora/sora_credential_holder.rs b/crates/desktop/tauri-artcraft/src/state/sora/sora_credential_holder.rs index d86d4f156c..033dfc3b6a 100644 --- a/crates/desktop/tauri-artcraft/src/state/sora/sora_credential_holder.rs +++ b/crates/desktop/tauri-artcraft/src/state/sora/sora_credential_holder.rs @@ -1,5 +1,5 @@ use std::ops::Deref; -use std::sync::{Arc, RwLock, RwLockReadGuard}; +use std::sync::{Arc, RwLock}; use anyhow::anyhow; use errors::AnyhowResult; use openai_sora_client::credentials::SoraCredentials; diff --git a/crates/desktop/tauri-artcraft/src/state/sora/sora_credential_manager.rs b/crates/desktop/tauri-artcraft/src/state/sora/sora_credential_manager.rs index fcb63b8109..0f4457fa51 100644 --- a/crates/desktop/tauri-artcraft/src/state/sora/sora_credential_manager.rs +++ b/crates/desktop/tauri-artcraft/src/state/sora/sora_credential_manager.rs @@ -2,11 +2,12 @@ use crate::state::app_dir::AppDataRoot; use crate::state::sora::read_sora_credentials_from_disk::read_sora_credentials_from_disk; use crate::state::sora::sora_credential_holder::SoraCredentialHolder; use errors::AnyhowResult; -use log::{error, warn}; +use log::{error, info, warn}; use openai_sora_client::credentials::SoraCredentials; use openai_sora_client::sentinel_refresh::refresh_sentinel; use std::fs::OpenOptions; use std::io::Write; +use openai_sora_client::sentinel_refresh::generate::token::generate_token; #[derive(Clone)] pub struct SoraCredentialManager { @@ -58,13 +59,17 @@ impl SoraCredentialManager { // NB(bt,2025-04-21): Technically we don't need credentials to get a sentinel. let mut creds = self.holder.get_credentials_required()?; - let sentinel = refresh_sentinel() + info!("Generating token..."); + + let sentinel = generate_token() .await .map_err(|err| { error!("Failed to refresh: {:?}", err); err })?; + info!("Token obtained."); + creds.sentinel = Some(sentinel.clone()); self.holder.set_credentials(&creds)?; diff --git a/crates/lib/api_clients/openai_sora_client/src/image_gen/image_gen_http_request.rs b/crates/lib/api_clients/openai_sora_client/src/image_gen/image_gen_http_request.rs index 3b6cc5541f..d0a1d39750 100644 --- a/crates/lib/api_clients/openai_sora_client/src/image_gen/image_gen_http_request.rs +++ b/crates/lib/api_clients/openai_sora_client/src/image_gen/image_gen_http_request.rs @@ -18,6 +18,9 @@ pub enum SoraError { #[error("Sora too many concurrent tasks: {0}")] TooManyConcurrentTasks(String), + #[error("Sora invalid JWT: {0}")] + InvalidJwt(String), + #[error("Sora API error: {0}")] GenericError(String), @@ -120,6 +123,7 @@ pub enum RawSoraError { #[serde(rename_all = "snake_case")] pub enum SoraErrorCode { SentinelBlock, + InvalidJwt, TokenExpired, TooManyConcurrentTasks, Unknown(String), @@ -188,6 +192,9 @@ pub (crate) async fn image_gen_http_request(sora_request: RawSoraImageGenRequest SoraErrorCode::Unknown(_) => { return Err(SoraError::GenericError(error_response.error.message)); } + SoraErrorCode::InvalidJwt => { + return Err(SoraError::InvalidJwt(error_response.error.message)); + } } }