Compare commits

...
16 changed files with 132 additions and 43 deletions
@@ -1,6 +1,6 @@
use crate::api::api_types::run_object_id::RunObjectId;
use crate::api::api_types::upload_object_id::UploadObjectId;
use crate::api::api_types::upload_mime_type::UploadMimeType;
use crate::api::api_types::upload_object_id::UploadObjectId;
use crate::api::common::common_header_values::{ORIGIN_VALUE, REFERER_VALUE};
use crate::credentials::world_labs_bearer_token::WorldLabsBearerToken;
use crate::credentials::world_labs_cookies::WorldLabsCookies;
@@ -25,7 +25,10 @@ use wreq::header::{ACCEPT, ACCEPT_ENCODING, ACCEPT_LANGUAGE, AUTHORIZATION, CACH
use wreq::Client;
use wreq_util::Emulation;
const BASE_URL : &str = "https://marble2-kgw-prod-iac1.wlt-ai.art/api/v1/objects";
const BASE_URL : &str = "https://api.worldlabs.ai/api/v1/objects";
// Note: WorldLabs is phasing out the old URL scheme:
// const BASE_URL : &str = "https://marble2-kgw-prod-iac1.wlt-ai.art/api/v1/objects";
fn get_url(upload_id: &UploadObjectId) -> String {
format!("{}/{}:upload", BASE_URL, upload_id.0)
@@ -24,7 +24,10 @@ use wreq::header::{ACCEPT, ACCEPT_ENCODING, ACCEPT_LANGUAGE, AUTHORIZATION, CACH
use wreq::Client;
use wreq_util::Emulation;
const URL : &str = "https://marble2-kgw-prod-iac1.wlt-ai.art/api/v1/objects";
const URL : &str = "https://api.worldlabs.ai/api/v1/objects";
// Note: WorldLabs is phasing out the old URL scheme:
// const URL : &str = "https://marble2-kgw-prod-iac1.wlt-ai.art/api/v1/objects";
pub struct CreateRunObjectArgs<'a> {
pub cookies: &'a WorldLabsCookies,
@@ -1,6 +1,6 @@
use crate::api::api_types::run_object_id::RunObjectId;
use crate::api::api_types::upload_object_id::UploadObjectId;
use crate::api::api_types::upload_mime_type::UploadMimeType;
use crate::api::api_types::upload_object_id::UploadObjectId;
use crate::api::common::common_header_values::{ORIGIN_VALUE, REFERER_VALUE};
use crate::credentials::world_labs_bearer_token::WorldLabsBearerToken;
use crate::credentials::world_labs_cookies::WorldLabsCookies;
@@ -25,7 +25,10 @@ use wreq::header::{ACCEPT, ACCEPT_ENCODING, ACCEPT_LANGUAGE, AUTHORIZATION, CACH
use wreq::Client;
use wreq_util::Emulation;
const URL : &str = "https://marble2-kgw-prod-iac1.wlt-ai.art/api/v1/objects";
const URL : &str = "https://api.worldlabs.ai/api/v1/objects";
// Note: WorldLabs is phasing out the old URL scheme:
// const URL : &str = "https://marble2-kgw-prod-iac1.wlt-ai.art/api/v1/objects";
pub struct CreateUploadObjectArgs<'a> {
pub cookies: &'a WorldLabsCookies,
@@ -1,6 +1,6 @@
use crate::api::api_types::run_object_id::RunObjectId;
use crate::api::api_types::upload_object_id::UploadObjectId;
use crate::api::api_types::upload_mime_type::UploadMimeType;
use crate::api::api_types::upload_object_id::UploadObjectId;
use crate::api::common::common_header_values::{ORIGIN_VALUE, REFERER_VALUE};
use crate::credentials::world_labs_bearer_token::WorldLabsBearerToken;
use crate::credentials::world_labs_cookies::WorldLabsCookies;
@@ -25,7 +25,10 @@ use wreq::header::{ACCEPT, ACCEPT_ENCODING, ACCEPT_LANGUAGE, AUTHORIZATION, CACH
use wreq::Client;
use wreq_util::Emulation;
const BASE_URL : &str = "https://marble2-kgw-prod-iac1.wlt-ai.art/api/v1/objects";
const BASE_URL : &str = "https://api.worldlabs.ai/api/v1/objects";
// Note: WorldLabs is phasing out the old URL scheme:
// const BASE_URL : &str = "https://marble2-kgw-prod-iac1.wlt-ai.art/api/v1/objects";
fn get_url(upload_id: &UploadObjectId) -> String {
format!("{}/{}:complete", BASE_URL, upload_id.0)
@@ -131,12 +134,12 @@ struct RawResponse {
#[cfg(test)]
mod tests {
use log::LevelFilter;
use crate::api::api_types::upload_object_id::UploadObjectId;
use crate::api::requests::objects::finalize_object_image_upload::{finalize_object_image_upload, get_url, FinalizeObjectImageUploadArgs};
use crate::test_utils::get_test_bearer_token::get_test_bearer_token;
use crate::test_utils::get_test_cookies::get_typed_test_cookies;
use crate::test_utils::setup_test_logging::setup_test_logging;
use log::LevelFilter;
#[test]
fn test_get_url() {
@@ -1,9 +1,9 @@
use crate::api::api_types::image_input_object_id::ImageInputObjectId;
use crate::api::api_types::meta_world_object_id::MetaWorldObjectId;
use crate::api::api_types::pano_object_id::PanoObjectId;
use crate::api::api_types::run_object_id::RunObjectId;
use crate::api::api_types::upload_mime_type::UploadMimeType;
use crate::api::api_types::upload_object_id::UploadObjectId;
use crate::api::api_types::meta_world_object_id::MetaWorldObjectId;
use crate::api::common::common_header_values::{ORIGIN_VALUE, REFERER_VALUE};
use crate::api::utils::upload_id_to_image_url::upload_id_to_image_url;
use crate::credentials::world_labs_bearer_token::WorldLabsBearerToken;
@@ -31,7 +31,10 @@ use wreq::header::{ACCEPT, ACCEPT_ENCODING, ACCEPT_LANGUAGE, AUTHORIZATION, CACH
use wreq::Client;
use wreq_util::Emulation;
const BASE_URL : &str = "https://marble2-kgw-prod-iac1.wlt-ai.art/api/v1/objects";
const BASE_URL : &str = "https://api.worldlabs.ai/api/v1/objects";
// Note: WorldLabs is phasing out the old URL scheme:
// const BASE_URL : &str = "https://marble2-kgw-prod-iac1.wlt-ai.art/api/v1/objects";
fn get_url(run_id: &RunObjectId) -> String {
format!("{}/{}", BASE_URL, run_id.0)
@@ -398,9 +401,9 @@ struct RawResponse {
#[cfg(test)]
mod tests {
use crate::api::api_types::image_input_object_id::ImageInputObjectId;
use crate::api::api_types::meta_world_object_id::MetaWorldObjectId;
use crate::api::api_types::pano_object_id::PanoObjectId;
use crate::api::api_types::run_object_id::RunObjectId;
use crate::api::api_types::meta_world_object_id::MetaWorldObjectId;
use crate::api::requests::objects::update_run_object_with_upload::{RawRequest, UpdateRunObjectWithUploadPayloadArgs};
#[test]
@@ -31,8 +31,10 @@ use wreq::header::{ACCEPT, ACCEPT_ENCODING, ACCEPT_LANGUAGE, AUTHORIZATION, CACH
use wreq::Client;
use wreq_util::Emulation;
use crate::api::api_types::world_id::WorldObjectId;
const BASE_URL : &str = "https://api.worldlabs.ai/api/v1/objects";
const BASE_URL : &str = "https://marble2-kgw-prod-iac1.wlt-ai.art/api/v1/objects";
// Note: WorldLabs is phasing out the old URL scheme:
// const BASE_URL : &str = "https://marble2-kgw-prod-iac1.wlt-ai.art/api/v1/objects";
fn get_url(run_id: &RunObjectId) -> String {
format!("{}/{}", BASE_URL, run_id.0)
@@ -1,6 +1,6 @@
use crate::api::api_types::run_object_id::RunObjectId;
use crate::api::api_types::upload_object_id::UploadObjectId;
use crate::api::api_types::upload_mime_type::UploadMimeType;
use crate::api::api_types::upload_object_id::UploadObjectId;
use crate::api::common::common_header_values::{ORIGIN_VALUE, REFERER_VALUE};
use crate::api::utils::upload_id_to_image_url::upload_id_to_image_url;
use crate::credentials::world_labs_bearer_token::WorldLabsBearerToken;
@@ -24,7 +24,10 @@ use wreq::header::{ACCEPT, ACCEPT_ENCODING, ACCEPT_LANGUAGE, AUTHORIZATION, CACH
use wreq::Client;
use wreq_util::Emulation;
const URL : &str = "https://marble2-kgw-prod-iac1.wlt-ai.art/api/v1/recaption2";
const URL : &str = "https://api.worldlabs.ai/api/v1/recaption2";
// Note: WorldLabs is phasing out the old URL scheme:
// const URL : &str = "https://marble2-kgw-prod-iac1.wlt-ai.art/api/v1/recaption2";
pub struct RecaptionImageArgs<'a> {
pub cookies: &'a WorldLabsCookies,
@@ -27,7 +27,10 @@ use wreq::header::{ACCEPT, ACCEPT_ENCODING, ACCEPT_LANGUAGE, AUTHORIZATION, CACH
use wreq::Client;
use wreq_util::Emulation;
const URL : &str = "https://marble2-kgw-prod-iac1.wlt-ai.art/api/v1/worlds";
const URL : &str = "https://api.worldlabs.ai/api/v1/worlds";
// Note: WorldLabs is phasing out the old URL scheme:
//const URL : &str = "https://marble2-kgw-prod-iac1.wlt-ai.art/api/v1/worlds";
pub struct CreateWorldArgs<'a> {
pub cookies: &'a WorldLabsCookies,
@@ -26,7 +26,10 @@ use wreq::header::{ACCEPT, ACCEPT_ENCODING, ACCEPT_LANGUAGE, AUTHORIZATION, CACH
use wreq::Client;
use wreq_util::Emulation;
const BASE_URL : &str = "https://marble2-kgw-prod-iac1.wlt-ai.art/api/v1/worlds";
const BASE_URL : &str = "https://api.worldlabs.ai/api/v1/worlds";
// Note: WorldLabs is phasing out the old URL scheme:
// const BASE_URL : &str = "https://marble2-kgw-prod-iac1.wlt-ai.art/api/v1/worlds";
fn get_url(world_id: &WorldObjectId) -> String {
format!("{}/{}", BASE_URL, world_id.0)
@@ -169,7 +172,30 @@ mod tests {
let cookies = get_typed_test_cookies().unwrap();
let bearer_token = get_test_bearer_token().unwrap();
let world_id = WorldObjectId("d60cfa21-5506-43de-9a9c-0707fc17a5ec".to_string());
let world_id = WorldObjectId("403c379b-b7d2-4449-8f1e-ebdb56142604".to_string());
let response = poll_world_status(PollWorldStatusArgs {
cookies: &cookies,
bearer_token: &bearer_token,
world_id: &world_id,
request_timeout: None,
}).await.unwrap();
println!("Is complete: {}", response.is_complete);
println!("Spz Url: {}", response.spz_splat_url.unwrap_or_else(|| "incomplete".to_string()));
assert_eq!(1, 2);
}
#[tokio::test]
#[ignore] // Client side tests only
async fn test_request_2() {
setup_test_logging(LevelFilter::Debug);
let cookies = get_typed_test_cookies().unwrap();
let bearer_token = get_test_bearer_token().unwrap();
let world_id = WorldObjectId("e739b11e-6039-49c7-b73d-b79e1b28e295".to_string());
let response = poll_world_status(PollWorldStatusArgs {
cookies: &cookies,
@@ -277,12 +277,10 @@ pub async fn upload_image_and_create_world_with_retry(args: UploadImageAndCreate
#[cfg(test)]
mod tests {
use crate::credentials::world_labs_bearer_token::WorldLabsBearerToken;
use crate::credentials::world_labs_cookies::WorldLabsCookies;
use crate::credentials::worldlabs_refresh_token::WorldLabsRefreshToken;
use crate::recipes::upload_image_and_create_world_with_retry::{upload_image_and_create_world_with_retry, FileBytesOrPath, UploadImageAndCreateWorldWithRetryArgs};
use crate::test_utils::get_test_bearer_token::get_test_bearer_token;
use crate::test_utils::get_test_cookies::get_typed_test_cookies;
use crate::test_utils::get_test_refresh_token::get_typed_test_refresh_token;
use crate::test_utils::setup_test_logging::setup_test_logging;
use filesys::file_read_bytes::file_read_bytes;
use log::LevelFilter;
@@ -294,10 +292,10 @@ mod tests {
let cookies = get_typed_test_cookies().unwrap();
let bearer_token = get_test_bearer_token().unwrap();
let refresh_token = WorldLabsRefreshToken::new("AMf-vBy91tuAOoeCwbXV3zNcFAM79ayEKb_cRmTBhVLAIRB1kDzswDgenVnxHfgbmUP95YTlJkpSwJUK3eTZv0iV1An-rZUVII8tOoyLNpV-O1dhytsMXFjR5Mc_hRxUhwuRphUZT6Zub9T1Twd8OL88twFnN-qlwq12W_eRZnEC_IExX0-j6vhfRbVXY0Bf9F1jddeaN7FMgagVzlIt7c7hbboR3XRlU61oBhuEw90ynHWPhDrnTVBtT9xI_TrNFr-v6mMh3M1DGFN9iaHVl74fEwbV6VanUGua55uxdVgia-SyOkYboKRGanWof2g69vZNvREdlMiNFYfWDtsHgcd_DaS6oemS5CVoSbK8sRREUAXHRCmwO5OyZehacnKstyy0TnNwZuvtn_KMzpk3ZmLM-Q-yERlJvpd9rHU-d-uV2R-yZIWgT3rshE9WyK9i4p731RgXfEC6".to_string());
let refresh_token = get_typed_test_refresh_token().unwrap();
//let file_path = "/home/bt/Pictures/locations/island.jpg";
let file_path = "/Users/bt/Pictures/Midjourney/dusk_house.jpeg";
let file_path = "/Users/bt/Pictures/Midjourney/jeep.jpeg";
let file_bytes = file_read_bytes(file_path).unwrap();
println!("File bytes len: {}", file_bytes.len());
@@ -310,8 +308,12 @@ mod tests {
file: FileBytesOrPath::Bytes(file_bytes),
}).await.unwrap();
println!("Upload URL: {}", results.image_upload_url);
println!("Object ID: {}", results.run_id.0);
println!("World ID: {}", results.world_id.0);
println!("Upload URL: {}", results.image_upload_url);
println!("Has new access tokens: {}", results.maybe_new_access_tokens.is_some());
assert_eq!(1, 2);
}
@@ -320,16 +322,9 @@ mod tests {
async fn test_requests_2() {
setup_test_logging(LevelFilter::Debug);
// bt@brand.io
let cookies = "";
let bearer_token = "eyJhbGciOiJSUzI1NiIsImtpZCI6Ijk4OGQ1YTM3OWI3OGJkZjFlNTBhNDA5MTEzZjJiMGM3NWU0NTJlNDciLCJ0eXAiOiJKV1QifQ.eyJuYW1lIjoiQnJhbmRvbiBUaG9tYXMiLCJwaWN0dXJlIjoiaHR0cHM6Ly9saDMuZ29vZ2xldXNlcmNvbnRlbnQuY29tL2EvQUNnOG9jS0lucl8yWGJ2Z1VERUxNOEpCTGdfa2tKbVpxWl9WcTlzZkI2bVR4VmQzc1NJRk4tST1zOTYtYyIsImlzcyI6Imh0dHBzOi8vc2VjdXJldG9rZW4uZ29vZ2xlLmNvbS93bHQtdHJhaW5pbmctZ3NjIiwiYXVkIjoid2x0LXRyYWluaW5nLWdzYyIsImF1dGhfdGltZSI6MTc2MDE3Nzk3OCwidXNlcl9pZCI6IjA1c0dhaHRySWdVMjVMaXR5NjhoZjRpMmV4SjIiLCJzdWIiOiIwNXNHYWh0cklnVTI1TGl0eTY4aGY0aTJleEoyIiwiaWF0IjoxNzY2MTI2ODg4LCJleHAiOjE3NjYxMzA0ODgsImVtYWlsIjoiYnRAYnJhbmQuaW8iLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiZmlyZWJhc2UiOnsiaWRlbnRpdGllcyI6eyJnb29nbGUuY29tIjpbIjEwNjEwODI2NzgzNTYyOTEwMTc1OSJdLCJlbWFpbCI6WyJidEBicmFuZC5pbyJdfSwic2lnbl9pbl9wcm92aWRlciI6Imdvb2dsZS5jb20ifX0.YLXZHg0rzMzyhhyJsO3DSMhU8GjnxtQtg1GiDwaxZjuybmabqOcR_b4C2lE2XwESg_dDYnIkmdas9wsHshy2bGPCAAtrinQpxTHWhIDxy0bsF8yW0BCOszwVseiTkXd6vveaGYH06EvH-nM4Q5AB_oKbsgRyMEbXhepvX7SlrmeaXxqldCLRalDj6gcEIY_TSwMmjnZ6-sFMPe92YjLY1ITPRx7S3YyWNwBG6mVpgoHcHudNAJ4TFxborZlhC1zpF0NDgtIhN5ITg0I1P0A-JTaBTJHukQwCPKhifFRA1kfcxzbAoZyPiPw2DdgXpDDnNzXUYgnaOOVyGs96Tx8hOQ";
let refresh_token = "AMf-vByUgA0J9S93vULECe-sD50cbR85AFVYF60gKAmLFF1MBYwXlKRJCsv7z3oSpLtP0ApyOU5fAl52qHWM2U0yKgEu5gQ5UCUDt5SEG4UBRHWvHEmLLcu-Zl04Fq4ljocSEO3qJzuX1wyshmptZxlDPRkjdLYgyn-Kp03woI2yRPKLuQF5hQtABHabsNUh9Zhs129sgxuUlOuw4zsFI4L8UdE3bEuF3k6Mic7KlE3440YwyQ8Qtmk9zHtXIx2ob56N-1WTGSqwMUuQ1mX4OOvLve9bw2zDW3UzchomTWkh732886RPrP-DNRkPbO3FejUEMxuYQFWYX3EEeIEdfNGXFNGPL1dNniSXlSaKadpX699Ishjviv-x9o-pPQa3zoAj3NzWLyd8mn5rDBh9qAO_iDETaeo01Sjhb4mGYfAWZ-g4S6nW778";
//let cookies = get_typed_test_cookies().unwrap();
let bearer_token = WorldLabsBearerToken::new(bearer_token.to_string());
let refresh_token = WorldLabsRefreshToken::new(refresh_token.to_string());
let cookies = WorldLabsCookies::new(cookies.to_string());
let cookies = get_typed_test_cookies().unwrap();
let bearer_token = get_test_bearer_token().unwrap();
let refresh_token = get_typed_test_refresh_token().unwrap();
//let file_path = "/home/bt/Pictures/locations/island.jpg";
let file_path = "/Users/bt/Pictures/Midjourney/train_ghibli.jpeg";
@@ -4,7 +4,7 @@ use std::fs::read_to_string;
#[cfg(test)]
pub (crate) fn get_test_bearer_token_raw() -> AnyhowResult<String> {
let cookies = read_to_string("/Users/bt/Artcraft/credentials/world_labs_bearer.txt")?;
let cookies = read_to_string("/Users/bt/Artcraft/credentials/worldlabs_bearer.txt")?;
//let cookies = read_to_string("/home/bt/Artcraft/credentials/world_labs_bearer.txt")?;
let cookies = cookies.trim().to_string();
Ok(cookies)
@@ -4,8 +4,8 @@ use std::fs::read_to_string;
#[cfg(test)]
pub (crate) fn get_test_cookies() -> AnyhowResult<String> {
//let cookies = read_to_string("/home/bt/Artcraft/credentials/world_labs_cookies.txt")?;
let cookies = read_to_string("/Users/bt/Artcraft/credentials/world_labs_cookies.txt")?;
//let cookies = read_to_string("/home/bt/Artcraft/credentials/worldlabs_cookies.txt")?;
let cookies = read_to_string("/Users/bt/Artcraft/credentials/worldlabs_cookies.txt")?;
let cookies = cookies.trim().to_string();
Ok(cookies)
}
@@ -0,0 +1,17 @@
use crate::credentials::worldlabs_refresh_token::WorldLabsRefreshToken;
use errors::AnyhowResult;
use std::fs::read_to_string;
#[cfg(test)]
pub (crate) fn get_test_refresh_token() -> AnyhowResult<String> {
//let cookies = read_to_string("/home/bt/Artcraft/credentials/worldlabs_cookies.txt")?;
let token = read_to_string("/Users/bt/Artcraft/credentials/worldlabs_refresh.txt")?;
let token = token.trim().to_string();
Ok(token)
}
#[cfg(test)]
pub (crate) fn get_typed_test_refresh_token() -> AnyhowResult<WorldLabsRefreshToken> {
let token = get_test_refresh_token()?;
Ok(WorldLabsRefreshToken::new(token))
}
@@ -1,3 +1,4 @@
pub mod get_test_cookies;
pub mod get_test_bearer_token;
pub mod setup_test_logging;
pub mod setup_test_logging;
pub mod get_test_refresh_token;
@@ -69,4 +69,12 @@ impl AppCredentialsDir {
pub fn get_worldlabs_cookies_path(&self) -> PathBuf {
self.path.join("worldlabs_cookies.txt")
}
pub fn get_worldlabs_bearer_path(&self) -> PathBuf {
self.path.join("worldlabs_bearer.txt")
}
pub fn get_worldlabs_refresh_path(&self) -> PathBuf {
self.path.join("worldlabs_refresh.txt")
}
}
@@ -192,8 +192,12 @@ impl WorldlabsCredentialManager {
.map(|cookies| cookies.to_serializable()),
user_id: None, // TODO
user_email: None, // TODO
bearer_token: creds.world_labs_bearer_token.map(|token| token.to_raw_string()),
refresh_token: creds.world_labs_refresh_token.map(|token| token.to_raw_string()),
bearer_token: creds.world_labs_bearer_token
.as_ref()
.map(|token| token.to_raw_string()),
refresh_token: creds.world_labs_refresh_token
.as_ref()
.map(|token| token.to_raw_string()),
};
let path = self.app_data_root.credentials_dir().get_worldlabs_state_path();
@@ -202,10 +206,25 @@ impl WorldlabsCredentialManager {
std::fs::write(path, serialized)?;
// TODO: This is just for building the client and testing.
if let Some(cookies) = creds.browser_cookies.as_ref() {
let cookies_header = cookies.to_cookie_string();
let path = self.app_data_root.credentials_dir().get_worldlabs_cookies_path();
std::fs::write(path, cookies_header)?;
{
if let Some(cookies) = creds.browser_cookies.as_ref() {
let cookies_header = cookies.to_cookie_string();
let path = self.app_data_root.credentials_dir().get_worldlabs_cookies_path();
std::fs::write(path, cookies_header)?;
}
// TODO: This is just for building the client and testing.
if let Some(bearer) = creds.world_labs_bearer_token.as_ref() {
let value = bearer.to_raw_string();
let path = self.app_data_root.credentials_dir().get_worldlabs_bearer_path();
std::fs::write(path, value)?;
}
if let Some(refresh) = creds.world_labs_refresh_token.as_ref() {
let value = refresh.to_raw_string();
let path = self.app_data_root.credentials_dir().get_worldlabs_refresh_path();
std::fs::write(path, value)?;
}
}
Ok(())