diff --git a/crates/api_clients/openai_sora_client/src/recipes/list_sora_tasks_with_session_auto_renew.rs b/crates/api_clients/openai_sora_client/src/recipes/list_classic_sora_tasks_with_session_auto_renew.rs similarity index 89% rename from crates/api_clients/openai_sora_client/src/recipes/list_sora_tasks_with_session_auto_renew.rs rename to crates/api_clients/openai_sora_client/src/recipes/list_classic_sora_tasks_with_session_auto_renew.rs index 75f52c8d60..aa596efd01 100644 --- a/crates/api_clients/openai_sora_client/src/recipes/list_sora_tasks_with_session_auto_renew.rs +++ b/crates/api_clients/openai_sora_client/src/recipes/list_classic_sora_tasks_with_session_auto_renew.rs @@ -5,7 +5,7 @@ use crate::recipes::maybe_refresh_credentials_on_sora_error::maybe_refresh_crede use crate::recipes::maybe_upgrade_or_renew_session::maybe_upgrade_or_renew_session; use crate::requests::common::task_id::TaskId; use crate::requests::deprecated::job_status::sora_job_status::{get_image_gen_status, StatusRequest, TaskResponse, VideoGenStatusResponse}; -use crate::requests::list_tasks::list_tasks::{list_tasks, ListTasksResponse}; +use crate::requests::list_classic_tasks::list_classic_tasks::{list_classic_tasks, ListTasksResponse}; use crate::requests::upload::upload_media_from_file::sora_media_upload_from_file; use crate::requests::upload::upload_media_http_request::SoraMediaUploadResponse; use anyhow::Error; @@ -14,7 +14,7 @@ use std::path::Path; /// Check Sora task statuses with session auto-renewal. /// If a new sora credential is returned, replace the old one with the new one. -pub async fn list_sora_tasks_with_session_auto_renew( +pub async fn list_classic_sora_tasks_with_session_auto_renew( credentials: &SoraCredentialSet, ) -> Result<(ListTasksResponse, Option), SoraError> { @@ -23,7 +23,7 @@ pub async fn list_sora_tasks_with_session_auto_renew( let upgraded_creds = maybe_new_creds.as_ref() .unwrap_or_else(|| &credentials); - let result = list_tasks(&upgraded_creds).await; + let result = list_classic_tasks(&upgraded_creds).await; let err = match result { Ok(response) => return Ok((response, maybe_new_creds)), @@ -38,7 +38,7 @@ pub async fn list_sora_tasks_with_session_auto_renew( // TODO(bt,2025-05-28): This should only be done if the credentials were actually refreshed. info!("Retrying task polling with new credentials..."); - let result = list_tasks(&new_creds).await?; + let result = list_classic_tasks(&new_creds).await?; Ok((result, Some(new_creds))) } diff --git a/crates/api_clients/openai_sora_client/src/recipes/mod.rs b/crates/api_clients/openai_sora_client/src/recipes/mod.rs index 39cae5ea5d..6cecc4e81b 100644 --- a/crates/api_clients/openai_sora_client/src/recipes/mod.rs +++ b/crates/api_clients/openai_sora_client/src/recipes/mod.rs @@ -1,7 +1,7 @@ pub mod image_remix_with_session_auto_renew; pub mod image_upload_from_bytes_with_session_auto_renew; pub mod image_upload_from_file_with_session_auto_renew; -pub mod list_sora_tasks_with_session_auto_renew; +pub mod list_classic_sora_tasks_with_session_auto_renew; pub mod maybe_refresh_credentials_on_sora_error; pub mod maybe_upgrade_or_renew_session; pub mod simple_image_gen_with_session_auto_renew; diff --git a/crates/api_clients/openai_sora_client/src/requests/common/task_id.rs b/crates/api_clients/openai_sora_client/src/requests/common/task_id.rs index 0352754ddc..131d933fe9 100644 --- a/crates/api_clients/openai_sora_client/src/requests/common/task_id.rs +++ b/crates/api_clients/openai_sora_client/src/requests/common/task_id.rs @@ -6,6 +6,14 @@ use serde_derive::{Deserialize, Serialize}; pub struct TaskId(pub String); impl TaskId { + pub fn from_string(id: String) -> Self { + Self(id) + } + + pub fn from_str(id: &str) -> Self { + Self(id.to_string()) + } + pub fn new(id: String) -> Self { Self(id) } diff --git a/crates/api_clients/openai_sora_client/src/requests/generate_sora2_video/generate_sora2_video_curl.txt b/crates/api_clients/openai_sora_client/src/requests/generate_sora2_video/generate_sora2_video_curl.txt index 1ede523a5a..cdbc71e9d0 100644 --- a/crates/api_clients/openai_sora_client/src/requests/generate_sora2_video/generate_sora2_video_curl.txt +++ b/crates/api_clients/openai_sora_client/src/requests/generate_sora2_video/generate_sora2_video_curl.txt @@ -1,11 +1,11 @@ curl 'https://sora.chatgpt.com/backend/nf/create' \ -H 'accept: */*' \ -H 'accept-language: en-US,en;q=0.9' \ - + -H 'authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IjE5MzQ0ZTY1LWJiYzktNDRkMS1hOWQwLWY5NTdiMDc5YmQwZSIsInR5cCI6IkpXVCJ9.eyJhdWQiOlsiaHR0cHM6Ly9hcGkub3BlbmFpLmNvbS92MSJdLCJjbGllbnRfaWQiOiJhcHBfWDh6WTZ2VzJwUTl0UjNkRTduSzFqTDVnSCIsImV4cCI6MTc2MDMwMDg4NSwiaHR0cHM6Ly9hcGkub3BlbmFpLmNvbS9hdXRoIjp7InVzZXJfaWQiOiJ1c2VyLWhRNWZjMUFWN3ZOY1FMazJ5ZkVGRVVibyJ9LCJodHRwczovL2FwaS5vcGVuYWkuY29tL3Byb2ZpbGUiOnsiZW1haWwiOiJ2aWN0b3J2b2ljZTg5QGdtYWlsLmNvbSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlfSwiaWF0IjoxNzU5NDM2ODg1LCJpc3MiOiJodHRwczovL2F1dGgub3BlbmFpLmNvbSIsImp0aSI6IjE1ZTU5NjYyLTIxOTYtNDE3MS05ODQwLWVlZmRkMTZkZWQzYSIsIm5iZiI6MTc1OTQzNjg4NSwicHdkX2F1dGhfdGltZSI6MTc1OTQzNjg4NDY3NCwic2NwIjpbIm9wZW5pZCIsImVtYWlsIiwicHJvZmlsZSIsIm9mZmxpbmVfYWNjZXNzIiwibW9kZWwucmVxdWVzdCIsIm1vZGVsLnJlYWQiLCJvcmdhbml6YXRpb24ucmVhZCIsIm9yZ2FuaXphdGlvbi53cml0ZSJdLCJzZXNzaW9uX2lkIjoiYXV0aHNlc3NfSU1TS1pmS0ZWMEh4R1I3eGhjNk5DVkRvIiwic3ViIjoiZ29vZ2xlLW9hdXRoMnwxMTY0NTkzMDAxOTg2MTk4ODg4MzYifQ.l2dQ26eSPCpKpGONFQACXSn-Rndp5ClfwWEAE1uB2eGECSbbn9-m_9zlA0yWnjqwjXYZ5pdWKbuTgWlDgDEwjsprp2OVFH6GIPVOAVKwSZzUWf8ywdpsQBcYIYTpNWGWTK7HytK3P4Xu5I--nZ4TMZI5_iFrXOb8eS-DOSzqm6DjWfiYRcm9qr4JRJokPsXXl1JnHVm0m9iI6xAgS95B0iPoWvfIHgihxWq5k3LdwM-rzIU2srKAZxjuyOnslHkakKZ5algVcxsDfKR4N8oIyNSoOeHPUKDiGnr-O-PqODbdAwqzo1JJP7Bmskc_5bx01pbi6bUQd5MPnT7qdEbIZexkYjUuV6qRCObmCWNV5WTJwVvdTZ9nBhQ2cp6wmAee3y4buQawtXlnhwNaYgkJtpOBgSYIKnTKPTKjMd1PigO57LgSrUPUHVyDVtZ_qBhIlw_PqAu_bFEfx9xyOiWp72KgyS89-32zeZzJcd6m85NsP_1clIe483GMl6wGYMhGxmJazM_twq28wrXwrI3vWnShhPA0qXLKYgFBT10z937OyNgmxXfNWRMB4OgkgXF5ylFHW0aN_ztu7H2NGx2jCIPn0QkAoc8bSjyW98Ybwn_adMiV4FkEeNLvc-KQf6DcULOYiKDYAZWVthpfc2yTAcJUtqmg9Gkw053xWObrRZ4' \ -H 'content-type: application/json' \ -b '__Host-next-auth.csrf-token=53557711393b5bb42525188b40374f5a2d88c6e62f40ffa7303a6855b7ed3abf%7C666b09f1d850c146bf75cb2ef458d273b49cdcc3536619a4748c8b6f213c7ae0; __Secure-next-auth.callback-url=https%3A%2F%2Fsora.com; _cfuvid=41MbomhrDEOwWq1PxwZypVaYzoaB.18Jvwv7pcEZwsE-1759436874191-0.0.1.1-604800000; oai-did=7c216860-5b73-4e63-983f-142dbcae1809; _cfuvid=3J0VKjFQbgG6Hrj6WpYA0qUMQ1FEb.Q6LBxmKcpfxyY-1759436879377-0.0.1.1-604800000; __cf_bm=A6amfZkzP5mF6VMM6IWMFCGx76Zc7infb4IIsJl.y_U-1759513275-1.0.1.1-YHpxVFHc7HuRvLnJZUYqV5_cFsTl4IQJHtIx1F82rxnk4DyZiJtZeZpmihYxYc38GmSxyqNcgLG7asQpY_SQCKQbAIzPySauv3AcNxFIuZQ; __cflb=0H28vBjUqcdJN5F5i8D8gyGbfU6KPdHGPmAV43mv94y; __cf_bm=YnxDZlIQqRlaAL_mwiFsbihIehwgCQ5m5hAbB5ywJz8-1759513279-1.0.1.1-xuUkakGqQN4IluRXGntBH6yxiSymBpjBRhUmOe9sIrB5hcn8jcIeRH2UfpGNHr2hbSd27ULgJ7zLcdkVgyMESRN2lqAlvFENbxtyP.Ei1lg; cf_clearance=.kz.DV5lLl_xAI2gP8EgTkpVwdjIftRJZYngwpDXo7M-1759513279-1.2.1.1-lL5ZfXJc137uNnBkoBgZTU8PHVxsdGFjlQz_2.D7W1e5c3oWOUJpDgzItw1tJHuLjUpb_pUV3t.gkwhDC8FJ1YVAOsP5gLJMtd3u88ENeVywIqv5UFevMEqWx9ftykyYOo5YQDeyzpCmHIMc27M3a.dbdpObo7foz3hBQZq59ApKLokhNl9.tC_8E77wVtH1qeHsuAMhH8BjDD2KsP9zmbDi.dHitv5MfE1BPPijC.0; cf_clearance=HRNRwdDQ77cyE4AnpAJrMTTMHyraDA8Z9H5O382kfXg-1759513279-1.2.1.1-8IR07RaXitgzhFxOLUtyQCKZLbD8aM18_7FgQlYE9mknbpQ6K77abiTNg7iub3rlrVavoTrJufW8co3mPgRrljOrzEoZ.qjmGfVYJUGSKKKa7CWGAC15DdMMihMZVilj2jp_eC1sOAuXgbxEaR7QoTMUfcKr_2j8DOnZ6ISdQkD1NdR6xBBhGrSVN3FTAXiJ3GSthnzwFQEIqrMvLTI10wFZQrAGQPfBFfQt9Ir.VkQ; oai-sc=0gAAAAABo4ArA8k5QOFRdnIRvcTY0StzTu1xvrrwcMw-zx_Z8udzogOUxSBc6Bb4NcmMfNmgJ8-IVdajuMyCqYyQw4SYe13w8ev8ydftBOuPp4tlfLJAOM9CtkSlWilKeJxM1eL3qm4QSX0k7CT6BiIDOW0HANclGTmpM471Fk8y43BkuypFNG7c3ScTcSLUMEBqFfayttl4zJleGafscgfvQWo5zqnlJfA; __Secure-next-auth.session-token=eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIn0..Hnw3hRsSeLnw2jF8.Go37dT_kOzeMROBsINCgknMy7dGYt6EXpmgK8jxi6fnlG_YtZzjFuKoY_xLxa51Q6GcWatqCnBnxj23K9MdMnwjKkaXWMm-zzWxGbdKI6cYfITNi0oDW59ieCB23dOAF8oqIhK1Hgrq2pEj4MLsK5h4GlS61SxDmgKEiOfM5VCz9uozD0wH7Pdecfk41szaSSs-vu2glT3wiKHn7f2ST8kl9I6CxcOwe2qYeWCMEKqTH2uERT7cRQ0PXC1qCL-N3N0oAiqiiVme4QKzbrdd9GRrcuyadXDPORmNQ5QSzwlfs4LVbHzHFYwyQdPJlYBJKmH1tmwGPWGt483OBbXuBCKCyvSX99bW7EiKETy2SC1KtOhPYh-BT-LVrgd4Nhiyy8OHJlI3UboW4OveRRdyTuhKmX5_li30uiZXKiPaAuYWXz2xvi8a2XusIF4IZvNzIIpsDidFOCExjqDt70xeEPLbW4ojPyfIxqGyrTqsuiJ9yTBgKemOcnXhm24udGbPpmFCPnXLe8iiZUJLDBVNUq-k7Fj2RbiQ5aRM31a4RcK_fxddyRTQwAInmm4_NXOA_agOtUUhGfTtkiknIYcvhsG2pJVNFmavVJfqP9jvnMI6syIltw_-7MOSChCXOsQsPmMniZOdCF58FWuEI1D7qd0pQeRhiadgV5olErauS25zhV90w4ozOGo5TiYFJo0s6_7RTI-1mIaRPE5m0o0J1t3gIONDasZv1zUu1YnS6iNRa5C01Pcqxj14vekoYz01YUNuHYIVTg0wfAzs1rvosRNW5XCN6ij0M8ugfv3hWZH3Qy5iWaI51cCmnCWgGZolcu0t-qif8xo0MhWlnbASfXNKYEQcDb7bAitTQhY62tCyjvJ4GcoB0yPnu_9jEGlVtQD_Xmmg2wmzZLrNN4nEGF6rIax6sIqA6MI1AYX4TKULd2LD4cC6XceadPOeQKPF6cSiRiV2ANqLlM7VsHCv07hd2-OBGxHSxNAdWeSmnF99Gm3tkyCYwE-Fho1LajXRpaH9MFErQqs_LIawESL7ZqvefLdu4ZfxYKqMBvftPzbIeOF9p4orI0n-jCny28qv1_u_xACR8o9M47Qi3FSrEEkxDlBFcjOa9Xh72y2bzLEtqI4DhJGhlBd3oN9gjv9Wu_--veIA0bDKwKT6E5Vt2KAXCTsfHeOEg9CG8HJVo4O6ZiZPBPCjQB9Z8yuC5ZRTgIyTZlOEkX3PFOofk7I4dAIVSL26PwGqcQIgGmxop6437L_aQnqgHjV01dQcduR0MUqjriQXHisHQxuQHTAYYEoJPKB7aLCO112WicaLRhiacAhVV00g2IePXlpO6DsKhCLS1VddbqrYF7KFvssAYmQCas3P8unFvjoDXQlAHgHKsI1YPzeCtR9ZWhXfKlSD8jhqaaeExltCNaM4aRRjTEs8p-dtFp6_qdniS8sV5m4kDF4KXAgoldjk98dhyosFG5rL45MU-y2tmoIpGcuQ3yLc_TYNLBnI6mnuveosVM4fG-BcrnLPNeNHGWzvJWb6oRPglXvWw400YUXRuYZ4lJS3xfSgrCPkXLmdNLnispXtH4702gQMoBjXJTdZI64HT8pPOJpz1TQLPFWXvs0oVSdcoXiewX3pCnzTHOybPJUMgOh4S4gqfJ3XDq_KK6pGQw4L63BWfWkxmSXstAIjCipqY-e-Epu1CWiqraJX7YvMzRIHalITTKl8JstTGqDjypIByQsju7eS44T5shxX3kkC4KHZhgtQYrOybygdpzhi2fs2rM90wk_ayXq_RTn75tjisJv3MfkwvjDAfixnYpsvFObxm4Qtt1a6GXs6ZCKaeTPkhJwQduBIxSm3aaoyMy3eMgHOpabG6ifdGNACGXgD47MOr5rzpRiSgRR6AyLl0W154tp26A0UojlQeh4qBn9Q9-8I3_z0-JwqCedWr9KbM2fKA-j7_Js12PDSDpojaSDuuq6qcAuOZEPpPCEsAugS8CGsoFJ_GGhIUA5BfMa-aaQj17RmHDKK9DYqC1mM-YLiPn0gJhdZnpQZd102W6Wtt7opJ9Y3R4UiUsEtYT75dhYEVyXXCj-f3Mgc6w5RZI6tzTntFgpmfGXqAxeiQhLzY26xwE9-L0TZ5PxJDpCkMwOAFzwvRelUQwuxcPaZWeWlWwT7oquhAF7SMo87tLV-FJwb1xwLy-gfiDq88-OEtqtkZ6d4PnDH7z4wGwWuXsjGUhaB3sBAmBVM55n_li42ikao3u1ZWyNhEiKht2y1hJzH9Tnt-zLMnuz8BWVu_D_qfwRkvI1MtiiX5zD1_0FQdOHaWsVfIjigTsxNumzAo6qh-tth3DG0kzV0tk2tSxRXiw0dK1PkyZoZeBUgER5CmFpYj1tr6QjvEb5kt8g_Y1MV2qRfMjSkfIWc9aqeyoVI-a8HJycCsspV4wDyhGlGjtWn6_sApSa82FsrDOVZ13u9FNHnEWflB9dw_aajPzgkPF_UeIS3s-p72orQoYVohmjaIZ_AAfFv-zPY8jR06se1vo-z52aDS7-2a3taMwd_XVLY9jGijCZLGrZW-zrznbi8ZFmypMBp8_goZkxJEcam6vIHoFNgYeWh27MLskxQ204Q27w-HjxCga1f1i69EoJpSivl7oLiX5ZVyUtI6DahP1tEC3d_pdYYAH3t8iLTVvan0HqQwzJyAMPbVEikXxr_xFOYut1kdY6jlqUwL7yHuHMGeQNnJ8Dw94CuMS_D8uF1FsOvABXX4hddhi16vq_AFVmyK3r4M0sTYfsnIJ2jAKhPwrOfA37fxVoX5fhhRNhC5P2fGT0YQGGyLK9qh5lLxP85zNHGNNHefeOapvjqdfmRnT-SM31Ot6V6M5TO-rbdJE5YS3sKxmszmhz-0aPzujWXmgAYXpcyj2W37cBJR6cJkCzgZTK5agjVZM3tbyiK6MXaym8-Iyqi7trqHYSouGmB6PqFe3dGkLXJz5B6bhv6H12UsWoZhLJpp7ZYdIP8S45mfyzSx9ei1YCy2JeP1hZR9c2Rv6DR0tIzWlh5rktuCAIIQgSLUyfttknoJtjjDU-h1N1452hpYon_fNN_K_pZgF_qaizFqR5B2_aS_Ic4INJcajP1gDsClTrKVMQBRvVjyyrhic2olineuXYRfL041bS8PfUFI-Ybdq94eeS-Ccfpfi3OmWCMD1eI8QHa6K7_rKfTy9_CTMbSr_bCBsO-zYu_sdb5VaabR9FR1NbUEkRbC8bIC9CYL_OFyBWAQ2j9pKdz33q4O_bBWcg3vdfx42y5FzyYXbo9sSt0xSvr3AaMml19tgSmyI4lb6LCtY6NrtAZ6cl9K1_ivfyO5YAjrbezZnJxD1lL88hk0eIwGYHzB6j-V-UdQm0IQ0lTluReLPWavltWSBdu0vHsfGyx3vZwCe9xrm1PJI4NXzB62JV3KFF0U2zWCFiXiPzwSuWow4Si3SIjTRpqKtGmKvWwQblekf-6aB_jSDFD_tUa4B7g3fog9yRRptuvR3Zjdb9XUi1BlS6sRCA9KbedYugPhm64szCj_iEytVLaN.i5iK5_NNKYl5DXDY2CGzkA; _dd_s=rum=2&id=c197b6e2-7096-4d0f-be57-52520458d2c5&created=1759513278755&expire=1759514226319' \ - + -H 'oai-device-id: 7c216860-5b73-4e63-983f-142dbcae1809' \ -H 'origin: https://sora.chatgpt.com' \ -H 'priority: u=1, i' \ @@ -73,4 +73,49 @@ curl 'https://sora.chatgpt.com/backend/nf/create' \ -H 'sec-fetch-site: same-origin' \ -H 'user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36' \ --data-raw '{"kind":"video","prompt":"SpongeBob buys Ozemspic for Patrick. Patrick is offended. ","title":null,"orientation":"portrait","size":"small","n_frames":300,"inpaint_items":[],"remix_target_id":null,"cameo_ids":null,"cameo_replacements":null,"model":"sy_8","style_id":null,"audio_caption":null,"audio_transcript":null,"video_caption":null,"storyboard_id":null}' - \ No newline at end of file + +-------------------------------------------- + +This one is portrait with an upload: + +curl 'https://sora.chatgpt.com/backend/nf/create' \ + -H 'accept: */*' \ + -H 'accept-language: en-US,en;q=0.9' \ + -H 'authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IjE5MzQ0ZTY1LWJiYzktNDRkMS1hOWQwLWY5NTdiMDc5YmQwZSIsInR5cCI6IkpXVCJ9.eyJhdWQiOlsiaHR0cHM6Ly9hcGkub3BlbmFpLmNvbS92MSJdLCJjbGllbnRfaWQiOiJhcHBfWDh6WTZ2VzJwUTl0UjNkRTduSzFqTDVnSCIsImV4cCI6MTc2MDMwMDg4NSwiaHR0cHM6Ly9hcGkub3BlbmFpLmNvbS9hdXRoIjp7InVzZXJfaWQiOiJ1c2VyLWhRNWZjMUFWN3ZOY1FMazJ5ZkVGRVVibyJ9LCJodHRwczovL2FwaS5vcGVuYWkuY29tL3Byb2ZpbGUiOnsiZW1haWwiOiJ2aWN0b3J2b2ljZTg5QGdtYWlsLmNvbSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlfSwiaWF0IjoxNzU5NDM2ODg1LCJpc3MiOiJodHRwczovL2F1dGgub3BlbmFpLmNvbSIsImp0aSI6IjE1ZTU5NjYyLTIxOTYtNDE3MS05ODQwLWVlZmRkMTZkZWQzYSIsIm5iZiI6MTc1OTQzNjg4NSwicHdkX2F1dGhfdGltZSI6MTc1OTQzNjg4NDY3NCwic2NwIjpbIm9wZW5pZCIsImVtYWlsIiwicHJvZmlsZSIsIm9mZmxpbmVfYWNjZXNzIiwibW9kZWwucmVxdWVzdCIsIm1vZGVsLnJlYWQiLCJvcmdhbml6YXRpb24ucmVhZCIsIm9yZ2FuaXphdGlvbi53cml0ZSJdLCJzZXNzaW9uX2lkIjoiYXV0aHNlc3NfSU1TS1pmS0ZWMEh4R1I3eGhjNk5DVkRvIiwic3ViIjoiZ29vZ2xlLW9hdXRoMnwxMTY0NTkzMDAxOTg2MTk4ODg4MzYifQ.l2dQ26eSPCpKpGONFQACXSn-Rndp5ClfwWEAE1uB2eGECSbbn9-m_9zlA0yWnjqwjXYZ5pdWKbuTgWlDgDEwjsprp2OVFH6GIPVOAVKwSZzUWf8ywdpsQBcYIYTpNWGWTK7HytK3P4Xu5I--nZ4TMZI5_iFrXOb8eS-DOSzqm6DjWfiYRcm9qr4JRJokPsXXl1JnHVm0m9iI6xAgS95B0iPoWvfIHgihxWq5k3LdwM-rzIU2srKAZxjuyOnslHkakKZ5algVcxsDfKR4N8oIyNSoOeHPUKDiGnr-O-PqODbdAwqzo1JJP7Bmskc_5bx01pbi6bUQd5MPnT7qdEbIZexkYjUuV6qRCObmCWNV5WTJwVvdTZ9nBhQ2cp6wmAee3y4buQawtXlnhwNaYgkJtpOBgSYIKnTKPTKjMd1PigO57LgSrUPUHVyDVtZ_qBhIlw_PqAu_bFEfx9xyOiWp72KgyS89-32zeZzJcd6m85NsP_1clIe483GMl6wGYMhGxmJazM_twq28wrXwrI3vWnShhPA0qXLKYgFBT10z937OyNgmxXfNWRMB4OgkgXF5ylFHW0aN_ztu7H2NGx2jCIPn0QkAoc8bSjyW98Ybwn_adMiV4FkEeNLvc-KQf6DcULOYiKDYAZWVthpfc2yTAcJUtqmg9Gkw053xWObrRZ4' \ + -H 'content-type: application/json' \ + -b '__Host-next-auth.csrf-token=53557711393b5bb42525188b40374f5a2d88c6e62f40ffa7303a6855b7ed3abf%7C666b09f1d850c146bf75cb2ef458d273b49cdcc3536619a4748c8b6f213c7ae0; __Secure-next-auth.callback-url=https%3A%2F%2Fsora.com; _cfuvid=41MbomhrDEOwWq1PxwZypVaYzoaB.18Jvwv7pcEZwsE-1759436874191-0.0.1.1-604800000; oai-did=7c216860-5b73-4e63-983f-142dbcae1809; _cfuvid=3J0VKjFQbgG6Hrj6WpYA0qUMQ1FEb.Q6LBxmKcpfxyY-1759436879377-0.0.1.1-604800000; __cflb=0H28vBjUqcdJN5F5i8D8gyGbfU6KPdHGDRRtJ35LbY9; cf_clearance=VtQ4ot_ZfCAXJEGWvjonzG.xV6DrSHOGWbhWmiWNUtA-1759519104-1.2.1.1-PhEsvsV1mBfZoUys8.EThBNQBqAkVRtNpiz57hSczT.oyAJP8NBEFrlBygmzdUq6u7l6Ag9dPHqUJH8ollLB9WwDguprdMOdz8zIrLpoBYyCXbSr1VvCLfhRdw.HqFoIVZbeH5sCEAtDybF2li0jGNuCw7if6gq.FLOlTxK7gHYsYmhbeZQ4xpL3IKJ_Tts77iEtvK0KAYLiKhDTW8gQTiD_Hp3HzcpWprMAdsckOSY; cf_clearance=TBN0NGQ1ThMhU3POQycbqPeR4lnPB2CluCKm.oreexo-1759519106-1.2.1.1-MFXpszFtGlx5r_ku3haWAXTupuoopmUZy3z0mLv9K.A9zk7x_969bb4xPlxPqPzL614KMuUilMsurnNvMOaMySJgbfv.Wk0.OkM3cVW_wNzCC6MtAP2y2XMoYUzMR4m13vSKI_mXlzqZaa5Bnz2bbM2Va5PYc7sp0YQE3fjzneWr3j6EmgM2kLyJM5Hj4DfCyRZOOT7hdzhVjixNRHBqJxqfsvapE_.7EVCayqv5GJo; oai-sc=0gAAAAABo4CGCQgMb0CiCRJdr6IIZgYVx3dN5sLdIkNoErslKPupCZ6WXt0681-1XqD1jSdNXGYoUwPBGAOs-i1w6JcnyHTYLnusz5VnzLGVOKhP_WoiaSfI-UBHXwosweLq-hy9WR9ZFRpJyh8PkZ3KhY59RFz6x4bYqInLG2xMCFdoStLK3tNohkkbHiwptZ8hMOA_jbg1TehcFJEdj8w7ko7TE9MnClA; __Secure-next-auth.session-token=eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIn0..PpPHyqWPPAu6nMy5.YXCuB0cxVsmJsxcIsD0wnhuopcOOwuZko8qkEAM_GHqxX9NWuMlVLr0Zg6bCPu7lqG-pATgiTaog-uc4Ur2TflgUWk8iOYR21tNfqXZL-y2O9P-3GqPj8CWGzS9UasbZKK1R4P3ECJ1WfDzzZxsvxnh4blmfMBE9VCImG4A0PIvmIrm5-Bv_J1VypDxDfl28xYKtPASje6odBFzCGYvCLyw52RFqeiUz3aJWy_6x1137u1fpc7N7rF2pNQBVKG3qQz9t_kri6uckWQWnLQVZd0plx5izgSbC0vWao6-2flUQHvnr8dqXWqTHESi7yjcJTaEu4CUR-jxKXhTvpHReKNyjEIXqF89wZ-W6_FTpKMKhP9D9WTXUs6JWmIkjT0c8K97rjoPI8F3_GCUhrnpfX3jwEIcMkYXKVMN24frQUO5LosXK4gOD8yWAGDOQ3iWSHHafZNAkqEC7Pyb9Fvl6R-9VkZTajX9frQ5T_tM40Z4HgnwZQpGpffuyaLyMvu-TVRF5PUmkRkTN4ToxROjFYJLaCXpJ7AHoL_-kntnV3OgclXhoBPAYbJ2LOGltMT6QqUvDui7PGhtn_HJ9ZampVKxEboJx23JbKc4Jc65JSDJcFkOUJtMrmURjYAAKwfGs6hA6W4ieeT9LFrJzFk_CM6wz-djPGADSbvJ-I3lkkqSFeBQENR9C9j8pou3agkxgMjxYdQqCdobtfut8XWSFAImRnGMsZeXOlmeIa2M7VlbOZST2ZI3I-vBc3n7_nRwaFR8YvgoslYMymCvMOv9960HUPL88dLutEH9AYgVT91dVUXEmGBGkuZsBhDHwxVY2k1D1aJ5z4TIbx32yr3M1tDwr93V-15b-l8VoECNqrIxt6Ixugvqely1dfMaCIpNh6spqanDFdYCX7YC8raT9nB0ss_yL6AB3e060h1jw79a4PtT8vumJiSqPSE6SfX5B9fdNdSkYNuYO8c4T3XsJul5oBkjwx9haoiI5GuaIEuGzNJMnLd9QPfHMsPQMG0zj93N-5XgYtqWgAdcllJNntl3I9-vUn3yViTojCvcNo7cDuQXYFME5xKsHUuHPAOAPrXntq4CCqTwVJkr-oeTq1xE19Zx_yGR3Iv96mE5lPgpb4S3sV7Yo-yfdy3scVoxYNxFj8aCbFI6ec0lOy4O9NvMllelUdpugoV2lHg6doiFI6DMnBhhKpi4CES2qLcW-ijZ0bJyxYoQojWNU-SmBkocF5jMCkXkYROPswXBkHtrZza4dD7gNpc3wY_XGTEl7aSbJUwr-CXVqy4TGFyEY6Kz3fxkfdw7UwEXU25moGB9REOxasA9xCZBOANzPLOJbCIgmkwOVK1Qa2TlgruLzMWpL6Mwtx42wo0MPKDKBJSvhHtNns_BxyKxnPX6Zf23RPh0VlCnFGHjdtOAvRNbLz-Pn9ya6veMavf0LZXeV4zKecBlx7ZxwEGck2JSei116a-O2UrM7pjcBWr-uNYiuTJ26aXoeREvZnlgBvGwSqFHMU65F5xGHaXmh_OOxIQwamwplbJwfxOXVPJYyZlWEbSuiyUphLvIeUHSoupkmljEv3Ja66m31jQukP0Yflkb-v02Zf2oiWkZINFxixeFnRyEs_fP3sK0c4OX3ynHB0X0MvMb2RGduQ2i-9J721x4Dn_O89hdHJ0_x8U04p47BHRO-e2hWMvt0YvjSB0FFmfeDqB2PcmTQUUN6auAlkx2ipwCdLtS9MfYkdR90aBTRYZgZ5zAfGe2iYa4RY6HcVJ_izFw0RYmrX79EHCm67S9ed4XiGWCw6v_BMd806KLyYITsZmIDGB6CL3WSKX8IcKPogrRZ5V35aolFSGcyLZVQYnAQCaYi9lFhsVJAQLRbZuXmPL8gWekYut__Wco7yn8LBRDEV6ZS-ej3IxaKrxGtNITmtDuQVbFjrp7tmC9z_ws3-sYc_wStRt0cfW88sOMnzn7NGTlqaFZBGNw7uMownsUm9FYWp95eBqbZ3mb-YFKalVV7ny4Jqr4JMlcCPUAL0UvSiZz5zars-joTp4kVJUBxjv6miWeXcPKycgtKYJf1oqxJzhJqAEZpdoT4GMPJeti1Rws0FL4OG5L8j4h-hKJWZjk_gkGXHwGkUX-YU0eLP3c1zC-4UR0CSsISkQBlqdzzt-X9Dx1QC-pbqCF26QKbqv_KrsuvpXp89lLGmNtZTM2K5-3smRPnD2joA0lA6TLuJiEnwYHeMAz9hEg3XMqn6Bu3sdzsSO_jOQNwLjGCXIdr4212uoXZ001rssMAwa5hmgyUpy4L9Uc54ZRRG2BenObBUqYycnG1d4LFLHOK5XJSVpS2msHbrSa3J7FezL8eVSBP69bAYN6rhj4v4fkld5NW-6z8_RFyM4qACp6mABzwPMsDEWME7vaW7JSUrbIFsYVdvIgIKhNJAF33IxNOleRCNmQFG490YPbFvGtgd6C7pS4vlxjFiaDmIATLp5X0blTNQFp-8JykwgiRhysfTOe_hnrVX2cEeZMvwDF4ZAXyu6GEeRbsEXxDPhDawO4NHN-C1iaG6fZnR3Su2Cnyh2q1pgWSQwmgRYJdTLJCFpVTYMFVc3o92vndeWUMCJPmPGSMtsmcs5ZSVGMVDD5bTZ2B2j5-X1fWjtlpZttTCJbWCBQ86KDj5zHyumv0Y0U-Xc5j8aqexxEBQhzIiP6XQfNcClVcuRLXSfdGe8jubcDB6YBBB5kzaViDszYnbLTMC5buvdygPhZJHqWd2OVwzlDMyTxCje9bHhB5KKeb60VPJa6kDEL0s4iPnL01H17aJQgf-7WWQaSJzYLtiEq_ppR344OA85KXNMnF9A3AB5BJ1SAiO3I3a6LW9r12Vh9V5Bm13MjZ4VqefJ6vtuG2XPzyshyip-MlbFCwBgpmNMFLQvPSzQAJr9P_U-RZB3kFPLIWel58ktqd6L8BmapLPTV_N092_yTxoom5vt_O9ggwRcD_VgwgzNrWxXN9pOFpMmRVmcsAB-q57_WVpSSixnnANYGF1GxmkIZYAUUT7eWJxkrksh_yvlXlbYfAORFL9OXMd7rfm49_4GXIg_Ggo-S5WiQElztasMMc02ksbHEIDzRfRTqeU9Qs_e5fyu8UjpUR0HFOZVXMhuDsfSRm-CveZ04fki_qhvyq4tia27p5W9BnC-k6sx8pE__IbLProTbI7c8DP3pnBIiswRuzP568wvBcxrK98vn0Z3yz2a1wNHMKwfe6Wq1TNKwWD6-9B7HkpNGfKohipCigf4tC8iijnuInFbxLXdTtcg3eoulbFqVpqjdqEGOaHwKnIbKdrx9zySqXIlQwTwgJiTJd3YGLVlfU7F4YH00tNfJDqC_UBr1P9REUnQiZFkJ2q2EtSVm2uLu3QWq2EOrN1pFBjvRJcF5zaDghMd5gYgmx6PLvVLr7_ug3t-uMDDplFHT1xzeOyqZQPUy7uFJAtF8RWECcEfHBEbVNak3b-olD0ueJmuY3e_GDn0uvgtLHDCK6TtKYBBQ79TAYrx7OyjHM3ce5XMEjGkvMNxRztb59oFKh.N72spCEvKq_ZeKorafcX6A; __cf_bm=MOCFPEyvkXg9PDdGyAQbH_S0djHzFMaw2v79dsXjGzA-1759520371-1.0.1.1-geNpGVhFtYzRCm12fCYy4gsDojdjky2iKUopaK4vW_lVSehSQK1Hj8Z_iJDiMkEN8rVAEYBFErl542d0XS0l8tymXAWaAo4VP2zECV0tDWs; __cf_bm=l1UffG72EauoSVFRyzzcqdd6PJLfBUw5rCl6g9OypPc-1759520372-1.0.1.1-n_WdmZOU12Mj62deGiSF.k.3S7t.A8RsliARlcOcuS63oyw_4zRjsFhbUi_ZuQlmEkUgtE33eg26cMiW0ENrf2ysXvILJRyuFjX4SRvumW0; _dd_s=rum=2&id=d4c98363-0de4-4d4a-a623-781175899e3c&created=1759519104528&expire=1759521705269' \ + -H 'oai-device-id: 7c216860-5b73-4e63-983f-142dbcae1809' \ + -H 'origin: https://sora.chatgpt.com' \ + -H 'priority: u=1, i' \ + -H 'referer: https://sora.chatgpt.com/explore' \ + -H 'sec-ch-ua: "Chromium";v="140", "Not=A?Brand";v="24", "Google Chrome";v="140"' \ + -H 'sec-ch-ua-mobile: ?0' \ + -H 'sec-ch-ua-platform: "macOS"' \ + -H 'sec-fetch-dest: empty' \ + -H 'sec-fetch-mode: cors' \ + -H 'sec-fetch-site: same-origin' \ + -H 'user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36' \ + --data-raw '{"kind":"video","prompt":"A quaint village town in a fantasy setting. The camera pulls back to show the village. ","title":null,"orientation":"landscape","size":"small","n_frames":300,"inpaint_items":[{"kind":"upload","upload_id":"media_01k6nscysdfxktrvshw0qmkmv3"}],"remix_target_id":null,"cameo_ids":null,"cameo_replacements":null,"model":"sy_8","style_id":null,"audio_caption":null,"audio_transcript":null,"video_caption":null,"storyboard_id":null}' + +{ + "kind":"video", + "prompt":"A quaint village", + "title":null, + "orientation":"landscape", + "size":"small", + "n_frames":300, + "inpaint_items":[ + { + "kind":"upload", + "upload_id":"media_01k6nscysdfxktrvshw0qmkmv3" + } + ], + "remix_target_id":null, + "cameo_ids":null, + "cameo_replacements":null, + "model":"sy_8", + "style_id":null, + "audio_caption":null, + "audio_transcript":null, + "video_caption":null, + "storyboard_id":null}' diff --git a/crates/api_clients/openai_sora_client/src/requests/list_tasks/list_tasks.rs b/crates/api_clients/openai_sora_client/src/requests/list_classic_tasks/list_classic_tasks.rs similarity index 92% rename from crates/api_clients/openai_sora_client/src/requests/list_tasks/list_tasks.rs rename to crates/api_clients/openai_sora_client/src/requests/list_classic_tasks/list_classic_tasks.rs index 47d9c662f9..a9feeab539 100644 --- a/crates/api_clients/openai_sora_client/src/requests/list_tasks/list_tasks.rs +++ b/crates/api_clients/openai_sora_client/src/requests/list_classic_tasks/list_classic_tasks.rs @@ -11,7 +11,7 @@ use serde_derive::Deserialize; use url::Url; use wreq::Client; -const SORA_LIST_TASKS_URL : &str = "https://sora.chatgpt.com/backend/v2/list_tasks?limit=20"; +const SORA_LIST_CLASSIC_TASKS_URL: &str = "https://sora.chatgpt.com/backend/v2/list_tasks?limit=20"; /// NB: We omit fields we're not using to prevent breakage. @@ -74,7 +74,7 @@ pub struct PartialGeneration { // ... lots of other fields ... } -pub async fn list_tasks(credentials: &SoraCredentialSet) -> Result { +pub async fn list_classic_tasks(credentials: &SoraCredentialSet) -> Result { let bearer_header = match credentials.jwt_bearer_token.as_ref() { Some(bearer) => bearer.to_authorization_header_value(), @@ -86,7 +86,7 @@ pub async fn list_tasks(credentials: &SoraCredentialSet) -> Result Result AnyhowResult<()> { let creds = get_test_credentials()?; - let result = list_tasks(&creds).await?; + let result = list_classic_tasks(&creds).await?; println!("result: {:#?}", result); assert_eq!(1, 2); Ok(()) } -} \ No newline at end of file +} diff --git a/crates/api_clients/openai_sora_client/src/requests/list_tasks/list_tasks_response.json b/crates/api_clients/openai_sora_client/src/requests/list_classic_tasks/list_tasks_response.json similarity index 100% rename from crates/api_clients/openai_sora_client/src/requests/list_tasks/list_tasks_response.json rename to crates/api_clients/openai_sora_client/src/requests/list_classic_tasks/list_tasks_response.json diff --git a/crates/api_clients/openai_sora_client/src/requests/list_classic_tasks/mod.rs b/crates/api_clients/openai_sora_client/src/requests/list_classic_tasks/mod.rs new file mode 100644 index 0000000000..22f2d9226f --- /dev/null +++ b/crates/api_clients/openai_sora_client/src/requests/list_classic_tasks/mod.rs @@ -0,0 +1 @@ +pub mod list_classic_tasks; \ No newline at end of file diff --git a/crates/api_clients/openai_sora_client/src/requests/list_sora2_drafts/http_response.rs b/crates/api_clients/openai_sora_client/src/requests/list_sora2_drafts/http_response.rs new file mode 100644 index 0000000000..98ba49dc67 --- /dev/null +++ b/crates/api_clients/openai_sora_client/src/requests/list_sora2_drafts/http_response.rs @@ -0,0 +1,51 @@ +use serde_derive::Deserialize; + +#[derive(Deserialize)] +pub (super) struct HttpDraftsResponse { + pub items: Vec, + + // NB: This is nullable. + // It's null in my tests, so I don't know if this is a string or integer yet. Probably an opaque string? + //pub cursor: Option, +} + +#[derive(Deserialize)] +pub (super) struct PartialItem { + // eg. "gen_01abc..." + pub id: String, + + pub task_id: String, + + //pub generation_id: String, // it looks like this matches "id" for now + + // The text prompt + pub prompt: String, + + // URL to the generation + pub url: String, + + // "downloadable" URL to the generation + // it looks like this matches "url" for now + pub downloadable_url: String, + + /// If there was a content violation, this will describe why. + pub reason_str: Option, + + // There are other things that might be interesting: "encodings", "width", "height", etc. +} + + +#[derive(Deserialize)] +#[serde(rename_all = "snake_case")] +pub enum DraftKind { + /// Video + SoraDraft, + + /// Video was blocked due to content + /// These failures will have different "reason_str" reasons. + SoraContentViolation, + + /// Unknown type. + #[serde(untagged)] + Unknown(String), +} diff --git a/crates/api_clients/openai_sora_client/src/requests/list_sora2_drafts/list_sora2_drafts.rs b/crates/api_clients/openai_sora_client/src/requests/list_sora2_drafts/list_sora2_drafts.rs new file mode 100644 index 0000000000..eedc9e86ec --- /dev/null +++ b/crates/api_clients/openai_sora_client/src/requests/list_sora2_drafts/list_sora2_drafts.rs @@ -0,0 +1,144 @@ +use crate::constants::user_agent::USER_AGENT; +use crate::creds::sora_credential_set::SoraCredentialSet; +use crate::error::sora_client_error::SoraClientError; +use crate::error::sora_error::SoraError; +use crate::error::sora_generic_api_error::SoraGenericApiError; +use crate::requests::common::task_id::TaskId; +use crate::requests::deprecated::job_status::sora_job_status::{Generation, StatusRequest, VideoGenStatusResponse}; +use crate::requests::list_sora2_drafts::http_response::HttpDraftsResponse; +use crate::utils_internal::classify_general_http_status_code_and_body::classify_general_http_status_code_and_body; +use log::{debug, error, info, warn}; +use serde_derive::Deserialize; +use url::Url; +use wreq::header::{ACCEPT, ACCEPT_LANGUAGE, AUTHORIZATION, CONTENT_TYPE, COOKIE, ORIGIN, REFERER}; +use wreq::Client; + +const SORA_LIST_DRAFTS_URL: &str = "https://sora.chatgpt.com/backend/project_y/profile/drafts?limit=15"; + + +/// NB: We omit fields we're not using to prevent breakage. +#[derive(Clone, Debug)] +pub struct ListSora2DraftsResponse { + pub drafts: Vec, +} + +#[derive(Clone, Debug)] +pub struct Draft { + pub id: String, + pub task_id: TaskId, + pub url: String, + pub prompt: String, +} + + +pub async fn list_sora2_drafts(credentials: &SoraCredentialSet) -> Result { + + let client = Client::new(); + + let authorization_header = credentials.jwt_bearer_token.as_ref() + .ok_or(SoraClientError::NoBearerTokenForRequest)? + .to_authorization_header_value(); + + let cookie = credentials.cookies.to_string(); + + // TODO: Make the sec-* headers match the user agent and platform + // TODO: device id + //-H 'oai-device-id: 7c216860-5b73-4e63-983f-142dbcae1809' \ + let mut http_request = client.get(SORA_LIST_DRAFTS_URL) + //.header("OpenAI-Sentinel-Token", &sentinel); + .header(ACCEPT, "*/*") + .header(REFERER, "https://sora.chatgpt.com/drafts") + .header(ACCEPT_LANGUAGE, "en-US,en;q=0.9") + .header(wreq::header::USER_AGENT, USER_AGENT) + .header(COOKIE, &cookie) + .header(AUTHORIZATION, &authorization_header) + .header("priority", "u=1, i") + .header("sec-ch-ua", "\"Chromium\";v=\"140\", \"Not=A?Brand\";v=\"24\", \"Google Chrome\";v=\"140\"") + .header("sec-ch-ua-mobile", "?0") + .header("sec-ch-ua-platform", "macOS") + .header("sec-fetch-dest", "empty") + .header("sec-fetch-mode", "cors") + .header("sec-fetch-site", "same-origin"); + + //if let Some(timeout) = args.request_timeout { + // http_request = http_request.timeout(timeout); + //} + + let http_request = http_request.build() + .map_err(|err| { + error!("Error building Sora 2 list drafts HTTP request: {:?}", err); + SoraClientError::WreqClientError(err) + })?; + + let response = client.execute(http_request) + .await + .map_err(|err| { + error!("Error during Sora 2 list drafts request: {:?}", err); + SoraClientError::WreqClientError(err) + })?; + + let status = response.status(); + + let response_body = &response.text().await + .map_err(|err| { + error!("Error reading Sora 2 list drafts response body: {:?}", err); + SoraClientError::WreqClientError(err) + })?; + + println!("Sora 2 list drafts response : {:?}", response_body); + println!("response : {}", response_body); + + if !status.is_success() { + error!("Sora list drafts request returned an error (code {}) : {:?}", status.as_u16(), response_body); + + // TODO: Categorize failures. + // error!("The sora task list request failed; status = {:?} ; response body = {}", status, response_body); + // let error = classify_general_http_status_code_and_body(status, &response_body).await; + // return Err(error); + + return Err(SoraGenericApiError::UncategorizedBadResponseWithStatusAndBody { + status_code: status, + body: response_body.to_string(), + }.into()); + } + + let response : HttpDraftsResponse = serde_json::from_str(response_body) + .map_err(|err| SoraGenericApiError::SerdeResponseParseErrorWithBody(err, response_body.to_string()))?; + + Ok(ListSora2DraftsResponse { + drafts: response.items + .into_iter() + .map(|draft| Draft { + id: draft.id, + task_id: TaskId::from_string(draft.task_id), + url: draft.url, + prompt: draft.prompt, + }).collect(), + }) +} + +/* +Error: SoraGenericApiError: UncategorizedBadResponseWithStatusAndBody { status_code: 400, +body: "{\n \"error\": {\n \"message\": \" +[{'type': 'missing', 'loc': ('body',), 'msg': 'Field required', 'input': None}]\",\n +\"type\": \"invalid_request_error\",\n \"param\": null,\n \"code\": null\n }\n}" } + + */ + +#[cfg(test)] +mod tests { + use crate::requests::list_classic_tasks::list_classic_tasks::list_classic_tasks; + use crate::test_utils::get_test_credentials::get_test_credentials; + use errors::AnyhowResult; + use crate::requests::list_sora2_drafts::list_sora2_drafts::list_sora2_drafts; + + #[ignore] // You can manually run "ignore" tests in the IDE, but they won't run in CI. + #[tokio::test] + pub async fn manual_test() -> AnyhowResult<()> { + let creds = get_test_credentials()?; + let result = list_sora2_drafts(&creds).await?; + println!("result: {:#?}", result); + assert_eq!(1, 2); + Ok(()) + } +} diff --git a/crates/api_clients/openai_sora_client/src/requests/list_sora2_tasks/list_tasks_sora2_drafts_request.txt b/crates/api_clients/openai_sora_client/src/requests/list_sora2_drafts/list_tasks_sora2_drafts_request.txt similarity index 100% rename from crates/api_clients/openai_sora_client/src/requests/list_sora2_tasks/list_tasks_sora2_drafts_request.txt rename to crates/api_clients/openai_sora_client/src/requests/list_sora2_drafts/list_tasks_sora2_drafts_request.txt diff --git a/crates/api_clients/openai_sora_client/src/requests/list_sora2_tasks/list_tasks_sora2_drafts_response.json b/crates/api_clients/openai_sora_client/src/requests/list_sora2_drafts/list_tasks_sora2_drafts_response.json similarity index 100% rename from crates/api_clients/openai_sora_client/src/requests/list_sora2_tasks/list_tasks_sora2_drafts_response.json rename to crates/api_clients/openai_sora_client/src/requests/list_sora2_drafts/list_tasks_sora2_drafts_response.json diff --git a/crates/api_clients/openai_sora_client/src/requests/list_sora2_drafts/mod.rs b/crates/api_clients/openai_sora_client/src/requests/list_sora2_drafts/mod.rs new file mode 100644 index 0000000000..1b250f4e07 --- /dev/null +++ b/crates/api_clients/openai_sora_client/src/requests/list_sora2_drafts/mod.rs @@ -0,0 +1,2 @@ +pub mod list_sora2_drafts; +pub (super) mod http_response; diff --git a/crates/api_clients/openai_sora_client/src/requests/list_sora2_tasks/list_tasks_sora2_pending_response.json b/crates/api_clients/openai_sora_client/src/requests/list_sora2_pending_tasks/list_tasks_sora2_pending_response.json similarity index 100% rename from crates/api_clients/openai_sora_client/src/requests/list_sora2_tasks/list_tasks_sora2_pending_response.json rename to crates/api_clients/openai_sora_client/src/requests/list_sora2_pending_tasks/list_tasks_sora2_pending_response.json diff --git a/crates/api_clients/openai_sora_client/src/requests/list_sora2_tasks/list_tasks_sora_2_pending_request.txt b/crates/api_clients/openai_sora_client/src/requests/list_sora2_pending_tasks/list_tasks_sora_2_pending_request.txt similarity index 98% rename from crates/api_clients/openai_sora_client/src/requests/list_sora2_tasks/list_tasks_sora_2_pending_request.txt rename to crates/api_clients/openai_sora_client/src/requests/list_sora2_pending_tasks/list_tasks_sora_2_pending_request.txt index b2a1ebfcdc..20d5eba278 100644 --- a/crates/api_clients/openai_sora_client/src/requests/list_sora2_tasks/list_tasks_sora_2_pending_request.txt +++ b/crates/api_clients/openai_sora_client/src/requests/list_sora2_pending_tasks/list_tasks_sora_2_pending_request.txt @@ -1,3 +1,6 @@ +We might not need this request - it's only for in-progres items. +It could be useful to show the progress bar, but the items disappear once done. + curl 'https://sora.chatgpt.com/backend/nf/pending' \ -H 'accept: */*' \ -H 'accept-language: en-US,en;q=0.9' \ @@ -12,4 +15,5 @@ curl 'https://sora.chatgpt.com/backend/nf/pending' \ -H 'sec-fetch-dest: empty' \ -H 'sec-fetch-mode: cors' \ -H 'sec-fetch-site: same-origin' \ - -H 'user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36' \ No newline at end of file + -H 'user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36' + \ No newline at end of file diff --git a/crates/api_clients/openai_sora_client/src/requests/list_tasks/mod.rs b/crates/api_clients/openai_sora_client/src/requests/list_tasks/mod.rs deleted file mode 100644 index 608526e2fa..0000000000 --- a/crates/api_clients/openai_sora_client/src/requests/list_tasks/mod.rs +++ /dev/null @@ -1 +0,0 @@ -pub mod list_tasks; \ No newline at end of file diff --git a/crates/api_clients/openai_sora_client/src/requests/mod.rs b/crates/api_clients/openai_sora_client/src/requests/mod.rs index 7afc818905..d64ad4f89a 100644 --- a/crates/api_clients/openai_sora_client/src/requests/mod.rs +++ b/crates/api_clients/openai_sora_client/src/requests/mod.rs @@ -4,6 +4,7 @@ pub mod common; pub mod deprecated; pub mod generate_sora2_video; pub mod image_gen; -pub mod list_sora2_tasks; -pub mod list_tasks; -pub mod upload; \ No newline at end of file +pub mod list_classic_tasks; +pub mod list_sora2_drafts; +pub mod upload; +pub mod upload_sora2; \ No newline at end of file diff --git a/crates/api_clients/openai_sora_client/src/requests/list_sora2_tasks/mod.rs b/crates/api_clients/openai_sora_client/src/requests/upload_sora2/mod.rs similarity index 100% rename from crates/api_clients/openai_sora_client/src/requests/list_sora2_tasks/mod.rs rename to crates/api_clients/openai_sora_client/src/requests/upload_sora2/mod.rs diff --git a/crates/api_clients/openai_sora_client/src/requests/upload_sora2/upload_sora2_request.txt b/crates/api_clients/openai_sora_client/src/requests/upload_sora2/upload_sora2_request.txt new file mode 100644 index 0000000000..cb63d0c331 --- /dev/null +++ b/crates/api_clients/openai_sora_client/src/requests/upload_sora2/upload_sora2_request.txt @@ -0,0 +1,21 @@ +This may be the same upload request as before, just with an updated subdomain/domain: + +curl 'https://sora.chatgpt.com/backend/uploads' \ + -H 'accept: */*' \ + -H 'accept-language: en-US,en;q=0.9' \ + -H 'authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IjE5MzQ0ZTY1LWJiYzktNDRkMS1hOWQwLWY5NTdiMDc5YmQwZSIsInR5cCI6IkpXVCJ9.eyJhdWQiOlsiaHR0cHM6Ly9hcGkub3BlbmFpLmNvbS92MSJdLCJjbGllbnRfaWQiOiJhcHBfWDh6WTZ2VzJwUTl0UjNkRTduSzFqTDVnSCIsImV4cCI6MTc2MDMwMDg4NSwiaHR0cHM6Ly9hcGkub3BlbmFpLmNvbS9hdXRoIjp7InVzZXJfaWQiOiJ1c2VyLWhRNWZjMUFWN3ZOY1FMazJ5ZkVGRVVibyJ9LCJodHRwczovL2FwaS5vcGVuYWkuY29tL3Byb2ZpbGUiOnsiZW1haWwiOiJ2aWN0b3J2b2ljZTg5QGdtYWlsLmNvbSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlfSwiaWF0IjoxNzU5NDM2ODg1LCJpc3MiOiJodHRwczovL2F1dGgub3BlbmFpLmNvbSIsImp0aSI6IjE1ZTU5NjYyLTIxOTYtNDE3MS05ODQwLWVlZmRkMTZkZWQzYSIsIm5iZiI6MTc1OTQzNjg4NSwicHdkX2F1dGhfdGltZSI6MTc1OTQzNjg4NDY3NCwic2NwIjpbIm9wZW5pZCIsImVtYWlsIiwicHJvZmlsZSIsIm9mZmxpbmVfYWNjZXNzIiwibW9kZWwucmVxdWVzdCIsIm1vZGVsLnJlYWQiLCJvcmdhbml6YXRpb24ucmVhZCIsIm9yZ2FuaXphdGlvbi53cml0ZSJdLCJzZXNzaW9uX2lkIjoiYXV0aHNlc3NfSU1TS1pmS0ZWMEh4R1I3eGhjNk5DVkRvIiwic3ViIjoiZ29vZ2xlLW9hdXRoMnwxMTY0NTkzMDAxOTg2MTk4ODg4MzYifQ.l2dQ26eSPCpKpGONFQACXSn-Rndp5ClfwWEAE1uB2eGECSbbn9-m_9zlA0yWnjqwjXYZ5pdWKbuTgWlDgDEwjsprp2OVFH6GIPVOAVKwSZzUWf8ywdpsQBcYIYTpNWGWTK7HytK3P4Xu5I--nZ4TMZI5_iFrXOb8eS-DOSzqm6DjWfiYRcm9qr4JRJokPsXXl1JnHVm0m9iI6xAgS95B0iPoWvfIHgihxWq5k3LdwM-rzIU2srKAZxjuyOnslHkakKZ5algVcxsDfKR4N8oIyNSoOeHPUKDiGnr-O-PqODbdAwqzo1JJP7Bmskc_5bx01pbi6bUQd5MPnT7qdEbIZexkYjUuV6qRCObmCWNV5WTJwVvdTZ9nBhQ2cp6wmAee3y4buQawtXlnhwNaYgkJtpOBgSYIKnTKPTKjMd1PigO57LgSrUPUHVyDVtZ_qBhIlw_PqAu_bFEfx9xyOiWp72KgyS89-32zeZzJcd6m85NsP_1clIe483GMl6wGYMhGxmJazM_twq28wrXwrI3vWnShhPA0qXLKYgFBT10z937OyNgmxXfNWRMB4OgkgXF5ylFHW0aN_ztu7H2NGx2jCIPn0QkAoc8bSjyW98Ybwn_adMiV4FkEeNLvc-KQf6DcULOYiKDYAZWVthpfc2yTAcJUtqmg9Gkw053xWObrRZ4' \ + -H 'content-type: multipart/form-data; boundary=----WebKitFormBoundary9881wW70TIkcu38b' \ + -b '__Host-next-auth.csrf-token=53557711393b5bb42525188b40374f5a2d88c6e62f40ffa7303a6855b7ed3abf%7C666b09f1d850c146bf75cb2ef458d273b49cdcc3536619a4748c8b6f213c7ae0; __Secure-next-auth.callback-url=https%3A%2F%2Fsora.com; _cfuvid=41MbomhrDEOwWq1PxwZypVaYzoaB.18Jvwv7pcEZwsE-1759436874191-0.0.1.1-604800000; oai-did=7c216860-5b73-4e63-983f-142dbcae1809; _cfuvid=3J0VKjFQbgG6Hrj6WpYA0qUMQ1FEb.Q6LBxmKcpfxyY-1759436879377-0.0.1.1-604800000; __cflb=0H28vBjUqcdJN5F5i8D8gyGbfU6KPdHGDRRtJ35LbY9; cf_clearance=VtQ4ot_ZfCAXJEGWvjonzG.xV6DrSHOGWbhWmiWNUtA-1759519104-1.2.1.1-PhEsvsV1mBfZoUys8.EThBNQBqAkVRtNpiz57hSczT.oyAJP8NBEFrlBygmzdUq6u7l6Ag9dPHqUJH8ollLB9WwDguprdMOdz8zIrLpoBYyCXbSr1VvCLfhRdw.HqFoIVZbeH5sCEAtDybF2li0jGNuCw7if6gq.FLOlTxK7gHYsYmhbeZQ4xpL3IKJ_Tts77iEtvK0KAYLiKhDTW8gQTiD_Hp3HzcpWprMAdsckOSY; cf_clearance=TBN0NGQ1ThMhU3POQycbqPeR4lnPB2CluCKm.oreexo-1759519106-1.2.1.1-MFXpszFtGlx5r_ku3haWAXTupuoopmUZy3z0mLv9K.A9zk7x_969bb4xPlxPqPzL614KMuUilMsurnNvMOaMySJgbfv.Wk0.OkM3cVW_wNzCC6MtAP2y2XMoYUzMR4m13vSKI_mXlzqZaa5Bnz2bbM2Va5PYc7sp0YQE3fjzneWr3j6EmgM2kLyJM5Hj4DfCyRZOOT7hdzhVjixNRHBqJxqfsvapE_.7EVCayqv5GJo; oai-sc=0gAAAAABo4CGCQgMb0CiCRJdr6IIZgYVx3dN5sLdIkNoErslKPupCZ6WXt0681-1XqD1jSdNXGYoUwPBGAOs-i1w6JcnyHTYLnusz5VnzLGVOKhP_WoiaSfI-UBHXwosweLq-hy9WR9ZFRpJyh8PkZ3KhY59RFz6x4bYqInLG2xMCFdoStLK3tNohkkbHiwptZ8hMOA_jbg1TehcFJEdj8w7ko7TE9MnClA; __Secure-next-auth.session-token=eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIn0..PpPHyqWPPAu6nMy5.YXCuB0cxVsmJsxcIsD0wnhuopcOOwuZko8qkEAM_GHqxX9NWuMlVLr0Zg6bCPu7lqG-pATgiTaog-uc4Ur2TflgUWk8iOYR21tNfqXZL-y2O9P-3GqPj8CWGzS9UasbZKK1R4P3ECJ1WfDzzZxsvxnh4blmfMBE9VCImG4A0PIvmIrm5-Bv_J1VypDxDfl28xYKtPASje6odBFzCGYvCLyw52RFqeiUz3aJWy_6x1137u1fpc7N7rF2pNQBVKG3qQz9t_kri6uckWQWnLQVZd0plx5izgSbC0vWao6-2flUQHvnr8dqXWqTHESi7yjcJTaEu4CUR-jxKXhTvpHReKNyjEIXqF89wZ-W6_FTpKMKhP9D9WTXUs6JWmIkjT0c8K97rjoPI8F3_GCUhrnpfX3jwEIcMkYXKVMN24frQUO5LosXK4gOD8yWAGDOQ3iWSHHafZNAkqEC7Pyb9Fvl6R-9VkZTajX9frQ5T_tM40Z4HgnwZQpGpffuyaLyMvu-TVRF5PUmkRkTN4ToxROjFYJLaCXpJ7AHoL_-kntnV3OgclXhoBPAYbJ2LOGltMT6QqUvDui7PGhtn_HJ9ZampVKxEboJx23JbKc4Jc65JSDJcFkOUJtMrmURjYAAKwfGs6hA6W4ieeT9LFrJzFk_CM6wz-djPGADSbvJ-I3lkkqSFeBQENR9C9j8pou3agkxgMjxYdQqCdobtfut8XWSFAImRnGMsZeXOlmeIa2M7VlbOZST2ZI3I-vBc3n7_nRwaFR8YvgoslYMymCvMOv9960HUPL88dLutEH9AYgVT91dVUXEmGBGkuZsBhDHwxVY2k1D1aJ5z4TIbx32yr3M1tDwr93V-15b-l8VoECNqrIxt6Ixugvqely1dfMaCIpNh6spqanDFdYCX7YC8raT9nB0ss_yL6AB3e060h1jw79a4PtT8vumJiSqPSE6SfX5B9fdNdSkYNuYO8c4T3XsJul5oBkjwx9haoiI5GuaIEuGzNJMnLd9QPfHMsPQMG0zj93N-5XgYtqWgAdcllJNntl3I9-vUn3yViTojCvcNo7cDuQXYFME5xKsHUuHPAOAPrXntq4CCqTwVJkr-oeTq1xE19Zx_yGR3Iv96mE5lPgpb4S3sV7Yo-yfdy3scVoxYNxFj8aCbFI6ec0lOy4O9NvMllelUdpugoV2lHg6doiFI6DMnBhhKpi4CES2qLcW-ijZ0bJyxYoQojWNU-SmBkocF5jMCkXkYROPswXBkHtrZza4dD7gNpc3wY_XGTEl7aSbJUwr-CXVqy4TGFyEY6Kz3fxkfdw7UwEXU25moGB9REOxasA9xCZBOANzPLOJbCIgmkwOVK1Qa2TlgruLzMWpL6Mwtx42wo0MPKDKBJSvhHtNns_BxyKxnPX6Zf23RPh0VlCnFGHjdtOAvRNbLz-Pn9ya6veMavf0LZXeV4zKecBlx7ZxwEGck2JSei116a-O2UrM7pjcBWr-uNYiuTJ26aXoeREvZnlgBvGwSqFHMU65F5xGHaXmh_OOxIQwamwplbJwfxOXVPJYyZlWEbSuiyUphLvIeUHSoupkmljEv3Ja66m31jQukP0Yflkb-v02Zf2oiWkZINFxixeFnRyEs_fP3sK0c4OX3ynHB0X0MvMb2RGduQ2i-9J721x4Dn_O89hdHJ0_x8U04p47BHRO-e2hWMvt0YvjSB0FFmfeDqB2PcmTQUUN6auAlkx2ipwCdLtS9MfYkdR90aBTRYZgZ5zAfGe2iYa4RY6HcVJ_izFw0RYmrX79EHCm67S9ed4XiGWCw6v_BMd806KLyYITsZmIDGB6CL3WSKX8IcKPogrRZ5V35aolFSGcyLZVQYnAQCaYi9lFhsVJAQLRbZuXmPL8gWekYut__Wco7yn8LBRDEV6ZS-ej3IxaKrxGtNITmtDuQVbFjrp7tmC9z_ws3-sYc_wStRt0cfW88sOMnzn7NGTlqaFZBGNw7uMownsUm9FYWp95eBqbZ3mb-YFKalVV7ny4Jqr4JMlcCPUAL0UvSiZz5zars-joTp4kVJUBxjv6miWeXcPKycgtKYJf1oqxJzhJqAEZpdoT4GMPJeti1Rws0FL4OG5L8j4h-hKJWZjk_gkGXHwGkUX-YU0eLP3c1zC-4UR0CSsISkQBlqdzzt-X9Dx1QC-pbqCF26QKbqv_KrsuvpXp89lLGmNtZTM2K5-3smRPnD2joA0lA6TLuJiEnwYHeMAz9hEg3XMqn6Bu3sdzsSO_jOQNwLjGCXIdr4212uoXZ001rssMAwa5hmgyUpy4L9Uc54ZRRG2BenObBUqYycnG1d4LFLHOK5XJSVpS2msHbrSa3J7FezL8eVSBP69bAYN6rhj4v4fkld5NW-6z8_RFyM4qACp6mABzwPMsDEWME7vaW7JSUrbIFsYVdvIgIKhNJAF33IxNOleRCNmQFG490YPbFvGtgd6C7pS4vlxjFiaDmIATLp5X0blTNQFp-8JykwgiRhysfTOe_hnrVX2cEeZMvwDF4ZAXyu6GEeRbsEXxDPhDawO4NHN-C1iaG6fZnR3Su2Cnyh2q1pgWSQwmgRYJdTLJCFpVTYMFVc3o92vndeWUMCJPmPGSMtsmcs5ZSVGMVDD5bTZ2B2j5-X1fWjtlpZttTCJbWCBQ86KDj5zHyumv0Y0U-Xc5j8aqexxEBQhzIiP6XQfNcClVcuRLXSfdGe8jubcDB6YBBB5kzaViDszYnbLTMC5buvdygPhZJHqWd2OVwzlDMyTxCje9bHhB5KKeb60VPJa6kDEL0s4iPnL01H17aJQgf-7WWQaSJzYLtiEq_ppR344OA85KXNMnF9A3AB5BJ1SAiO3I3a6LW9r12Vh9V5Bm13MjZ4VqefJ6vtuG2XPzyshyip-MlbFCwBgpmNMFLQvPSzQAJr9P_U-RZB3kFPLIWel58ktqd6L8BmapLPTV_N092_yTxoom5vt_O9ggwRcD_VgwgzNrWxXN9pOFpMmRVmcsAB-q57_WVpSSixnnANYGF1GxmkIZYAUUT7eWJxkrksh_yvlXlbYfAORFL9OXMd7rfm49_4GXIg_Ggo-S5WiQElztasMMc02ksbHEIDzRfRTqeU9Qs_e5fyu8UjpUR0HFOZVXMhuDsfSRm-CveZ04fki_qhvyq4tia27p5W9BnC-k6sx8pE__IbLProTbI7c8DP3pnBIiswRuzP568wvBcxrK98vn0Z3yz2a1wNHMKwfe6Wq1TNKwWD6-9B7HkpNGfKohipCigf4tC8iijnuInFbxLXdTtcg3eoulbFqVpqjdqEGOaHwKnIbKdrx9zySqXIlQwTwgJiTJd3YGLVlfU7F4YH00tNfJDqC_UBr1P9REUnQiZFkJ2q2EtSVm2uLu3QWq2EOrN1pFBjvRJcF5zaDghMd5gYgmx6PLvVLr7_ug3t-uMDDplFHT1xzeOyqZQPUy7uFJAtF8RWECcEfHBEbVNak3b-olD0ueJmuY3e_GDn0uvgtLHDCK6TtKYBBQ79TAYrx7OyjHM3ce5XMEjGkvMNxRztb59oFKh.N72spCEvKq_ZeKorafcX6A; __cf_bm=MOCFPEyvkXg9PDdGyAQbH_S0djHzFMaw2v79dsXjGzA-1759520371-1.0.1.1-geNpGVhFtYzRCm12fCYy4gsDojdjky2iKUopaK4vW_lVSehSQK1Hj8Z_iJDiMkEN8rVAEYBFErl542d0XS0l8tymXAWaAo4VP2zECV0tDWs; __cf_bm=l1UffG72EauoSVFRyzzcqdd6PJLfBUw5rCl6g9OypPc-1759520372-1.0.1.1-n_WdmZOU12Mj62deGiSF.k.3S7t.A8RsliARlcOcuS63oyw_4zRjsFhbUi_ZuQlmEkUgtE33eg26cMiW0ENrf2ysXvILJRyuFjX4SRvumW0; _dd_s=rum=2&id=d4c98363-0de4-4d4a-a623-781175899e3c&created=1759519104528&expire=1759521275652' \ + -H 'oai-device-id: 7c216860-5b73-4e63-983f-142dbcae1809' \ + -H 'origin: https://sora.chatgpt.com' \ + -H 'priority: u=1, i' \ + -H 'referer: https://sora.chatgpt.com/explore' \ + -H 'sec-ch-ua: "Chromium";v="140", "Not=A?Brand";v="24", "Google Chrome";v="140"' \ + -H 'sec-ch-ua-mobile: ?0' \ + -H 'sec-ch-ua-platform: "macOS"' \ + -H 'sec-fetch-dest: empty' \ + -H 'sec-fetch-mode: cors' \ + -H 'sec-fetch-site: same-origin' \ + -H 'user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36' \ + --data-raw $'------WebKitFormBoundary9881wW70TIkcu38b\r\nContent-Disposition: form-data; name="file"; filename="artcraft_kscc8n1yj6tyqcxm5btfp32v9b412kz9.png"\r\nContent-Type: image/png\r\n\r\n\r\n------WebKitFormBoundary9881wW70TIkcu38b\r\nContent-Disposition: form-data; name="file_name"\r\n\r\nartcraft_kscc8n1yj6tyqcxm5btfp32v9b412kz9.png\r\n------WebKitFormBoundary9881wW70TIkcu38b--\r\n' + diff --git a/crates/api_clients/openai_sora_client/src/requests/upload_sora2/upload_sora2_response.json b/crates/api_clients/openai_sora_client/src/requests/upload_sora2/upload_sora2_response.json new file mode 100644 index 0000000000..b4f31dd45e --- /dev/null +++ b/crates/api_clients/openai_sora_client/src/requests/upload_sora2/upload_sora2_response.json @@ -0,0 +1,15 @@ +{ + "id": "media_01k6nscysdfxktrvshw0qmkmv3", + "type": "image", + "created_at": "2025-10-03T19:39:49.938416Z", + "filename": "artcraft_kscc8n1yj6tyqcxm5btfp32v9b412kz9.png", + "extension": "png", + "mime_type": "image/png", + "url": "https://videos.openai.com/vg-assets/assets%2Fclient_upload%2Fmedia%2F984cd7658c4eeb0be057d5d91c4faf3d2e5fd579%2Fmedia_01k6nscysdfxktrvshw0qmkmv3.png?st=2025-10-03T18%3A03%3A28Z&se=2025-10-09T19%3A03%3A28Z&sks=b&skt=2025-10-03T18%3A03%3A28Z&ske=2025-10-09T19%3A03%3A28Z&sktid=a48cca56-e6da-484e-a814-9c849652bcb3&skoid=aa5ddad1-c91a-4f0a-9aca-e20682cc8969&skv=2019-02-02&sv=2018-11-09&sr=b&sp=r&spr=https%2Chttp&sig=bUkwbc6pZTrGs4YiV9Q6I%2FwP7JPgtexoyvC5b2Aa6CE%3D&az=oaivgprodscus", + "width": 1248, + "height": 832, + "duration_sec": null, + "n_frames": 1, + "size_bytes": 2278064, + "thumbnail_url": "https://videos.openai.com/vg-assets/assets%2Fclient_upload%2Fmedia%2F984cd7658c4eeb0be057d5d91c4faf3d2e5fd579%2Fmedia_01k6nscysdfxktrvshw0qmkmv3.jpg?st=2025-10-03T18%3A03%3A28Z&se=2025-10-09T19%3A03%3A28Z&sks=b&skt=2025-10-03T18%3A03%3A28Z&ske=2025-10-09T19%3A03%3A28Z&sktid=a48cca56-e6da-484e-a814-9c849652bcb3&skoid=aa5ddad1-c91a-4f0a-9aca-e20682cc8969&skv=2019-02-02&sv=2018-11-09&sr=b&sp=r&spr=https%2Chttp&sig=XhdbsZRUv0OiVGHf%2Fc9YWCDhWBqXy5YzqO32ahqKc1E%3D&az=oaivgprodscus" +} \ No newline at end of file diff --git a/crates/desktop/artcraft/src/services/sora/commands/check_sora_session_command.rs b/crates/desktop/artcraft/src/services/sora/commands/check_sora_session_command.rs index 9cdba036cf..9bd00e1dc9 100644 --- a/crates/desktop/artcraft/src/services/sora/commands/check_sora_session_command.rs +++ b/crates/desktop/artcraft/src/services/sora/commands/check_sora_session_command.rs @@ -3,7 +3,7 @@ use chrono::{TimeDelta, Utc}; use errors::AnyhowResult; use log::{error, info}; use openai_sora_client::recipes::maybe_upgrade_or_renew_session::maybe_upgrade_or_renew_session; -use openai_sora_client::requests::list_tasks::list_tasks::list_tasks; +use openai_sora_client::requests::list_tasks::list_classic_tasks::list_tasks; use serde_derive::Serialize; use std::ops::Add; use tauri::{AppHandle, State}; diff --git a/crates/desktop/artcraft/src/services/sora/threads/sora_task_polling/handle_failed_generations.rs b/crates/desktop/artcraft/src/services/sora/threads/sora_task_polling/handle_failed_generations.rs index c969acd2b6..8c3b6b5a87 100644 --- a/crates/desktop/artcraft/src/services/sora/threads/sora_task_polling/handle_failed_generations.rs +++ b/crates/desktop/artcraft/src/services/sora/threads/sora_task_polling/handle_failed_generations.rs @@ -9,7 +9,7 @@ use enums::tauri::tasks::task_status; use errors::AnyhowResult; use log::info; use openai_sora_client::requests::common::task_id::TaskId; -use openai_sora_client::requests::list_tasks::list_tasks::PartialTaskResponse; +use openai_sora_client::requests::list_tasks::list_classic_tasks::PartialTaskResponse; use sqlite_tasks::queries::list_tasks_by_provider_and_status::Task; use sqlite_tasks::queries::update_task_status::{update_task_status, UpdateTaskArgs}; use std::collections::HashMap; diff --git a/crates/desktop/artcraft/src/services/sora/threads/sora_task_polling/handle_successful_generations.rs b/crates/desktop/artcraft/src/services/sora/threads/sora_task_polling/handle_successful_generations.rs index 34fc6e4fac..e573249a3a 100644 --- a/crates/desktop/artcraft/src/services/sora/threads/sora_task_polling/handle_successful_generations.rs +++ b/crates/desktop/artcraft/src/services/sora/threads/sora_task_polling/handle_successful_generations.rs @@ -20,9 +20,9 @@ use idempotency::uuid::generate_random_uuid; use log::{error, info}; use once_cell::sync::Lazy; use openai_sora_client::creds::sora_credential_set::SoraCredentialSet; -use openai_sora_client::recipes::list_sora_tasks_with_session_auto_renew::list_sora_tasks_with_session_auto_renew; +use openai_sora_client::recipes::list_classic_sora_tasks_with_session_auto_renew::list_classic_sora_tasks_with_session_auto_renew; use openai_sora_client::requests::common::task_id::TaskId; -use openai_sora_client::requests::list_tasks::list_tasks::{PartialGeneration, PartialTaskResponse}; +use openai_sora_client::requests::list_tasks::list_classic_tasks::{PartialGeneration, PartialTaskResponse}; use reqwest::Url; use sqlite_tasks::queries::list_tasks_by_provider_and_status::{list_tasks_by_provider_and_status, ListTasksByProviderAndStatusArgs, Task, TaskList}; use sqlite_tasks::queries::update_task_status::{update_task_status, UpdateTaskArgs}; diff --git a/crates/desktop/artcraft/src/services/sora/threads/sora_task_polling/sora_task_polling_thread.rs b/crates/desktop/artcraft/src/services/sora/threads/sora_task_polling/sora_task_polling_thread.rs index 1b093d71e0..391513826a 100644 --- a/crates/desktop/artcraft/src/services/sora/threads/sora_task_polling/sora_task_polling_thread.rs +++ b/crates/desktop/artcraft/src/services/sora/threads/sora_task_polling/sora_task_polling_thread.rs @@ -22,9 +22,9 @@ use idempotency::uuid::generate_random_uuid; use log::{error, info, warn}; use once_cell::sync::Lazy; use openai_sora_client::creds::sora_credential_set::SoraCredentialSet; -use openai_sora_client::recipes::list_sora_tasks_with_session_auto_renew::list_sora_tasks_with_session_auto_renew; +use openai_sora_client::recipes::list_classic_sora_tasks_with_session_auto_renew::list_classic_sora_tasks_with_session_auto_renew; use openai_sora_client::requests::common::task_id::TaskId; -use openai_sora_client::requests::list_tasks::list_tasks::TaskStatus; +use openai_sora_client::requests::list_tasks::list_classic_tasks::TaskStatus; use reqwest::Url; use sqlite_tasks::queries::list_tasks_by_provider_and_status::{list_tasks_by_provider_and_status, ListTasksByProviderAndStatusArgs, Task, TaskList}; use sqlite_tasks::queries::update_task_status::{update_task_status, UpdateTaskArgs}; @@ -129,7 +129,7 @@ async fn poll_sora_tasks( .collect::>(); let (sora_response, maybe_new_creds) = - list_sora_tasks_with_session_auto_renew(&sora_creds).await?; + list_classic_sora_tasks_with_session_auto_renew(&sora_creds).await?; if let Some(new_creds) = maybe_new_creds { info!("Saving new credentials.");