diff --git a/crates/api_clients/grok_client/src/datatypes/user_id.rs b/crates/api_clients/grok_client/src/datatypes/user_id.rs index f79c86f696..61581f17bb 100644 --- a/crates/api_clients/grok_client/src/datatypes/user_id.rs +++ b/crates/api_clients/grok_client/src/datatypes/user_id.rs @@ -1,4 +1,5 @@ /// Type for User IDs. /// User IDs are UUIDs. +#[derive(Clone, Debug)] pub struct UserId(pub String); diff --git a/crates/api_clients/grok_client/src/recipes/request_client_secrets.rs b/crates/api_clients/grok_client/src/recipes/request_client_secrets.rs index 708355fb8f..3ae848b548 100644 --- a/crates/api_clients/grok_client/src/recipes/request_client_secrets.rs +++ b/crates/api_clients/grok_client/src/recipes/request_client_secrets.rs @@ -44,8 +44,8 @@ pub struct ClientSecrets { /// Numbers from the xsid script. pub numbers: XsidNumbers, - /// Scripts (for later use) - pub scripts: HashMap, + // /// Scripts (for later use) + // pub scripts: HashMap, } /// Load all the things needed to make requests. @@ -106,7 +106,7 @@ pub async fn request_client_secrets(args: RequestClientSecretsArgs<'_>) -> Resul verification_token, svg_path, numbers, - scripts: payloads.scripts, + //scripts: payloads.scripts, }) } diff --git a/crates/api_clients/grok_client/src/requests/index_page/parsers/index/mod.rs b/crates/api_clients/grok_client/src/requests/index_page/parsers/index/mod.rs index 9c37626d48..998219a627 100644 --- a/crates/api_clients/grok_client/src/requests/index_page/parsers/index/mod.rs +++ b/crates/api_clients/grok_client/src/requests/index_page/parsers/index/mod.rs @@ -4,3 +4,4 @@ pub mod parse_index_script_list; pub mod parse_index_sentry_trace; pub mod parse_index_svg_paths; pub mod parse_index_verification_token; +mod parse_index_user_id; diff --git a/crates/api_clients/grok_client/src/requests/index_page/parsers/index/parse_index_user_id.rs b/crates/api_clients/grok_client/src/requests/index_page/parsers/index/parse_index_user_id.rs new file mode 100644 index 0000000000..e5835e70c3 --- /dev/null +++ b/crates/api_clients/grok_client/src/requests/index_page/parsers/index/parse_index_user_id.rs @@ -0,0 +1,50 @@ +use crate::datatypes::user_id::UserId; +use once_cell::sync::Lazy; +use regex::Regex; + +/// Find the user id in the index.html payload +/// eg. \"userId\":\"85980643-ffab-4984-a3de-59a608c47d7f\", +static JSON_REGEX: Lazy = Lazy::new(|| { + Regex::new(r#"\\?"userI[dD]\\?":\s*\\?"([a-zA-Z0-9-]{25,})\\?",?"#) + .expect("Regex should parse") +}); + +/// Parse the user id from the index.html +pub fn parse_index_user_id(html: &str) -> Option { + let maybe_meta = scrape_user_id_via_regex(html); + + if let Some(meta) = maybe_meta { + return Some(UserId(meta)) + } + + None +} + +fn scrape_user_id_via_regex(html: &str) -> Option { + let captures = JSON_REGEX.captures(html)?; + let capture = captures.get(1)?; + Some(capture.as_str().to_string()) +} + +#[cfg(test)] +mod tests { + use crate::requests::index_page::get_index_page::{get_index, GetIndexPageArgs}; + use crate::requests::index_page::parsers::index::parse_index_user_id::parse_index_user_id; + use crate::test_utils::get_test_cookies::get_test_cookies; + use errors::AnyhowResult; + + #[tokio::test] + #[ignore] // Manual test invocation + async fn test() -> AnyhowResult<()> { + let cookie = get_test_cookies()?; + let index = get_index(GetIndexPageArgs { + cookie: &cookie, + }).await?; + + let user_id = parse_index_user_id(&index.body); + println!("User ID : {:?}", user_id); + + assert_eq!(1, 2); + Ok(()) + } +} diff --git a/crates/api_clients/grok_client/src/requests/video_gen_chat_conversation/grok_video_gen_chat_conversation.rs b/crates/api_clients/grok_client/src/requests/video_gen_chat_conversation/grok_video_gen_chat_conversation.rs index 26954ce9c7..4cfa5a200d 100644 --- a/crates/api_clients/grok_client/src/requests/video_gen_chat_conversation/grok_video_gen_chat_conversation.rs +++ b/crates/api_clients/grok_client/src/requests/video_gen_chat_conversation/grok_video_gen_chat_conversation.rs @@ -24,14 +24,14 @@ const CHAT_CONVERSATION_URL: &str = "https://grok.com/rest/app-chat/conversation /// Request builder pub struct GrokVideoGenChatConversationBuilder<'a> { - pub user_id: &'a UserId, pub file_id: &'a FileId, pub media_type: VideoMediaPostType, - pub cookie: &'a str, - // TODO: Optional prompt pub prompt: Option<&'a str>, pub request_timeout: Option, + pub cookie: &'a str, + pub user_id: &'a UserId, + pub baggage: &'a Baggage, pub sentry_trace: &'a SentryTrace, pub verification_token: &'a VerificationToken,