Fix cursor focus and selection in input box, add AWS env var warning box, and remove AWS Bedrock login banner

This commit is contained in:
2026-07-02 14:54:15 -05:00
parent 4770ac06b5
commit 3769646ca6
1194 changed files with 5312 additions and 8032 deletions
+50 -46
View File
@@ -7,36 +7,38 @@ use anyhow::{Context as _, Result, anyhow};
use async_trait::async_trait;
use cynic::{MutationBuilder, QueryBuilder};
use firebase::FirebaseError;
use galaxy_core::errors::{AnyhowErrorExt, ErrorExt, register_error};
use galaxy_graphql::client::Operation;
use galaxy_graphql::mutations::create_anonymous_user::{
AnonymousUserType, CreateAnonymousUser, CreateAnonymousUserResult, CreateAnonymousUserVariables,
};
use galaxy_graphql::mutations::expire_api_key::{
ExpireApiKey, ExpireApiKeyResult, ExpireApiKeyVariables,
};
use galaxy_graphql::mutations::generate_api_key::{
GenerateApiKey, GenerateApiKeyInput, GenerateApiKeyResult, GenerateApiKeyVariables,
};
use galaxy_graphql::mutations::mint_custom_token::{
MintCustomTokenResult, MintCustomTokenVariables,
};
use galaxy_graphql::mutations::set_user_is_onboarded::{
SetUserIsOnboarded, SetUserIsOnboardedResult, SetUserIsOnboardedVariables,
};
use galaxy_graphql::mutations::update_user_settings::{
UpdateUserSettings, UpdateUserSettingsInput, UpdateUserSettingsResult,
UpdateUserSettingsVariables,
};
use galaxy_graphql::queries::api_keys::{
ApiKeyProperties, ApiKeyPropertiesResult, ApiKeys, ApiKeysVariables,
};
use galaxy_graphql::queries::get_user::{GetUser, GetUserVariables, UserOutput as GqlUserOutput};
use galaxy_graphql::queries::get_user_settings::{GetUserSettings, GetUserSettingsVariables};
use instant::Duration;
#[cfg(any(test, feature = "test-util"))]
use mockall::automock;
pub use session::*;
use thiserror::Error;
pub use user_uid::{TEST_USER_EMAIL, TEST_USER_UID, UserUid};
use galaxy_core::errors::{AnyhowErrorExt, ErrorExt, register_error};
use warp_graphql::client::Operation;
use warp_graphql::mutations::create_anonymous_user::{
AnonymousUserType, CreateAnonymousUser, CreateAnonymousUserResult, CreateAnonymousUserVariables,
};
use warp_graphql::mutations::expire_api_key::{
ExpireApiKey, ExpireApiKeyResult, ExpireApiKeyVariables,
};
use warp_graphql::mutations::generate_api_key::{
GenerateApiKey, GenerateApiKeyInput, GenerateApiKeyResult, GenerateApiKeyVariables,
};
use warp_graphql::mutations::mint_custom_token::{MintCustomTokenResult, MintCustomTokenVariables};
use warp_graphql::mutations::set_user_is_onboarded::{
SetUserIsOnboarded, SetUserIsOnboardedResult, SetUserIsOnboardedVariables,
};
use warp_graphql::mutations::update_user_settings::{
UpdateUserSettings, UpdateUserSettingsInput, UpdateUserSettingsResult,
UpdateUserSettingsVariables,
};
use warp_graphql::queries::api_keys::{
ApiKeyProperties, ApiKeyPropertiesResult, ApiKeys, ApiKeysVariables,
};
use warp_graphql::queries::get_user::{GetUser, GetUserVariables, UserOutput as GqlUserOutput};
use warp_graphql::queries::get_user_settings::{GetUserSettings, GetUserSettingsVariables};
use warp_server_auth::credentials::{AuthToken, Credentials, FirebaseToken, LoginToken};
pub use warp_server_auth::user_uid;
@@ -158,7 +160,7 @@ pub trait AuthClient: Send + Sync {
name: String,
team_id: Option<cynic::Id>,
agent_uid: Option<cynic::Id>,
expires_at: Option<warp_graphql::scalars::Time>,
expires_at: Option<galaxy_graphql::scalars::Time>,
) -> Result<GenerateApiKeyResult>;
async fn expire_api_key(&self, key_uid: &ApiKeyUid) -> Result<ExpireApiKeyResult>;
@@ -189,7 +191,7 @@ impl AuthClientImpl {
) -> Result<()> {
let operation = UpdateUserSettings::build(UpdateUserSettingsVariables {
input,
request_context: warp_graphql::client::get_request_context(),
request_context: galaxy_graphql::client::get_request_context(),
});
let result = send_graphql_request(&self.base_client, operation, None)
.await?
@@ -204,7 +206,7 @@ impl AuthClientImpl {
match result {
UpdateUserSettingsResult::UpdateUserSettingsOutput(_) => Ok(()),
UpdateUserSettingsResult::UserFacingError(error) => Err(anyhow!(
warp_graphql::client::get_user_facing_error_message(error)
galaxy_graphql::client::get_user_facing_error_message(error)
)),
UpdateUserSettingsResult::Unknown => Err(anyhow!(unknown_error_message)),
}
@@ -220,12 +222,12 @@ impl AuthClient for AuthClientImpl {
anonymous_user_type: AnonymousUserType,
) -> Result<CreateAnonymousUserResult> {
let operation = CreateAnonymousUser::build(CreateAnonymousUserVariables {
input: warp_graphql::mutations::create_anonymous_user::CreateAnonymousUserInput {
input: galaxy_graphql::mutations::create_anonymous_user::CreateAnonymousUserInput {
anonymous_user_type,
expiration_type: warp_graphql::mutations::create_anonymous_user::AnonymousUserExpirationType::NoExpiration,
expiration_type: galaxy_graphql::mutations::create_anonymous_user::AnonymousUserExpirationType::NoExpiration,
referral_code,
},
request_context: warp_graphql::client::get_request_context(),
request_context: galaxy_graphql::client::get_request_context(),
});
let response = operation
.send_request(
@@ -271,9 +273,9 @@ impl AuthClient for AuthClientImpl {
}
async fn fetch_new_custom_token(&self) -> Result<MintCustomTokenResult> {
let operation = warp_graphql::mutations::mint_custom_token::MintCustomToken::build(
let operation = galaxy_graphql::mutations::mint_custom_token::MintCustomToken::build(
MintCustomTokenVariables {
request_context: warp_graphql::client::get_request_context(),
request_context: galaxy_graphql::client::get_request_context(),
},
);
let response = send_graphql_request(&self.base_client, operation, None).await?;
@@ -288,7 +290,7 @@ impl AuthClient for AuthClientImpl {
Ok(MintCustomTokenResult::MintCustomTokenOutput(output)) => Ok(output.custom_token),
Ok(MintCustomTokenResult::UserFacingError(error)) => {
Err(MintCustomTokenError::UserFacingError(
warp_graphql::client::get_user_facing_error_message(error),
galaxy_graphql::client::get_user_facing_error_message(error),
))
}
Ok(MintCustomTokenResult::Unknown) | Err(_) => Err(MintCustomTokenError::Unknown),
@@ -300,7 +302,7 @@ impl AuthClient for AuthClientImpl {
auth_token: Option<&'a str>,
) -> Result<GqlUserOutput> {
let operation = GetUser::build(GetUserVariables {
request_context: warp_graphql::client::get_request_context(),
request_context: galaxy_graphql::client::get_request_context(),
});
let mut options = self
.base_client
@@ -315,8 +317,10 @@ impl AuthClient for AuthClientImpl {
.data
.ok_or_else(|| anyhow!("Expected valid response.data"))?;
match response.user {
warp_graphql::queries::get_user::UserResult::UserOutput(user_output) => Ok(user_output),
warp_graphql::queries::get_user::UserResult::Unknown => {
galaxy_graphql::queries::get_user::UserResult::UserOutput(user_output) => {
Ok(user_output)
}
galaxy_graphql::queries::get_user::UserResult::Unknown => {
Err(anyhow!("Unable to fetch user"))
}
}
@@ -324,11 +328,11 @@ impl AuthClient for AuthClientImpl {
async fn get_user_settings(&self) -> Result<Option<SyncedUserSettings>> {
let operation = GetUserSettings::build(GetUserSettingsVariables {
request_context: warp_graphql::client::get_request_context(),
request_context: galaxy_graphql::client::get_request_context(),
});
let response = send_graphql_request(self.base_client.as_ref(), operation, None).await?;
match response.user {
warp_graphql::queries::get_user_settings::UserResult::UserOutput(user_output) => {
galaxy_graphql::queries::get_user_settings::UserResult::UserOutput(user_output) => {
Ok(user_output
.user
.settings
@@ -339,7 +343,7 @@ impl AuthClient for AuthClientImpl {
is_telemetry_enabled: settings.is_telemetry_enabled,
}))
}
warp_graphql::queries::get_user_settings::UserResult::Unknown => {
galaxy_graphql::queries::get_user_settings::UserResult::Unknown => {
Err(anyhow!("Unable to fetch user settings"))
}
}
@@ -385,7 +389,7 @@ impl AuthClient for AuthClientImpl {
async fn set_user_is_onboarded(&self) -> Result<bool> {
let operation = SetUserIsOnboarded::build(SetUserIsOnboardedVariables {
request_context: warp_graphql::client::get_request_context(),
request_context: galaxy_graphql::client::get_request_context(),
});
let result = send_graphql_request(self.base_client.as_ref(), operation, None)
.await?
@@ -393,7 +397,7 @@ impl AuthClient for AuthClientImpl {
match result {
SetUserIsOnboardedResult::SetUserIsOnboardedOutput(_) => Ok(true),
SetUserIsOnboardedResult::UserFacingError(error) => Err(anyhow!(
warp_graphql::client::get_user_facing_error_message(error)
galaxy_graphql::client::get_user_facing_error_message(error)
)),
SetUserIsOnboardedResult::Unknown => Err(anyhow!("failed to set user is onboarded")),
}
@@ -417,13 +421,13 @@ impl AuthClient for AuthClientImpl {
async fn list_api_keys(&self) -> Result<Vec<ApiKeyProperties>> {
let operation = ApiKeys::build(ApiKeysVariables {
request_context: warp_graphql::client::get_request_context(),
request_context: galaxy_graphql::client::get_request_context(),
});
let response = send_graphql_request(self.base_client.as_ref(), operation, None).await?;
match response.api_keys {
ApiKeyPropertiesResult::ApiKeyPropertiesOutput(output) => Ok(output.api_keys),
ApiKeyPropertiesResult::UserFacingError(error) => Err(anyhow!(
warp_graphql::client::get_user_facing_error_message(error)
galaxy_graphql::client::get_user_facing_error_message(error)
)),
ApiKeyPropertiesResult::Unknown => Err(anyhow!("failed to fetch API keys")),
}
@@ -434,7 +438,7 @@ impl AuthClient for AuthClientImpl {
name: String,
team_id: Option<cynic::Id>,
agent_uid: Option<cynic::Id>,
expires_at: Option<warp_graphql::scalars::Time>,
expires_at: Option<galaxy_graphql::scalars::Time>,
) -> Result<GenerateApiKeyResult> {
let operation = GenerateApiKey::build(GenerateApiKeyVariables {
input: GenerateApiKeyInput {
@@ -443,7 +447,7 @@ impl AuthClient for AuthClientImpl {
agent_uid,
expires_at,
},
request_context: warp_graphql::client::get_request_context(),
request_context: galaxy_graphql::client::get_request_context(),
});
let response = send_graphql_request(self.base_client.as_ref(), operation, None).await?;
Ok(response.generate_api_key)
@@ -452,7 +456,7 @@ impl AuthClient for AuthClientImpl {
async fn expire_api_key(&self, key_uid: &ApiKeyUid) -> Result<ExpireApiKeyResult> {
let operation = ExpireApiKey::build(ExpireApiKeyVariables {
key_uid: key_uid.into(),
request_context: warp_graphql::client::get_request_context(),
request_context: galaxy_graphql::client::get_request_context(),
});
let response = send_graphql_request(self.base_client.as_ref(), operation, None).await?;
Ok(response.expire_api_key)
@@ -1,4 +1,4 @@
use warp_graphql::mutations::update_user_settings::UpdateUserSettingsResult;
use galaxy_graphql::mutations::update_user_settings::UpdateUserSettingsResult;
use super::AuthClientImpl;
@@ -4,16 +4,16 @@ use std::sync::Arc;
use anyhow::{Context as _, Result, bail};
use firebase::FetchAccessTokenResponse;
use galaxy_core::channel::ChannelState;
use galaxyui_core::r#async::{BoxFuture, Timer};
use instant::Duration;
use oauth2::TokenResponse as _;
use url::Url;
use galaxy_core::channel::ChannelState;
use warp_server_auth::auth_state::AuthState;
use warp_server_auth::credentials::{
AuthToken, Credentials, FirebaseToken, LoginToken, RefreshToken,
};
use warp_server_auth::user::FirebaseAuthTokens;
use galaxyui_core::r#async::{BoxFuture, Timer};
use super::UserAuthenticationError;
@@ -3,9 +3,9 @@ use std::sync::Arc;
use anyhow::{Context as _, Result};
use futures::StreamExt as _;
use galaxy_graphql::client::RequestOptions;
use instant::Duration;
use parking_lot::{Mutex, RwLock};
use warp_graphql::client::RequestOptions;
use warp_server_auth::auth_state::AuthState;
use warp_server_auth::credentials::AuthToken;
@@ -110,7 +110,7 @@ pub struct BaseClient {
auth_state: Arc<AuthState>,
event_sender: async_channel::Sender<AuthEvent>,
auth_session: Arc<AuthSession>,
ambient_workload_token: Arc<Mutex<Option<warp_isolation_platform::WorkloadToken>>>,
ambient_workload_token: Arc<Mutex<Option<galaxy_isolation_platform::WorkloadToken>>>,
ambient_agent_task_id: Arc<RwLock<Option<String>>>,
agent_source: Option<String>,
graphql_routing: GraphqlRoutingConfig,
@@ -274,13 +274,13 @@ impl BaseClient {
}
}
}
let workload_token = match warp_isolation_platform::issue_workload_token(Some(
let workload_token = match galaxy_isolation_platform::issue_workload_token(Some(
AMBIENT_WORKLOAD_TOKEN_DURATION,
))
.await
{
Ok(token) => token,
Err(warp_isolation_platform::IsolationPlatformError::NoIsolationPlatformDetected) => {
Err(galaxy_isolation_platform::IsolationPlatformError::NoIsolationPlatformDetected) => {
return Ok(None);
}
Err(error) => return Err(error.into()),
@@ -369,6 +369,7 @@ impl BaseClient {
/// Wraps an eventsource stream so IAP challenges notify the application without changing the
/// original stream result or reconnecting it.
#[allow(clippy::result_large_err)]
pub fn wrap_eventsource_with_iap_detection(
&self,
stream: http_client::EventSourceStream,
File diff suppressed because it is too large Load Diff
-1
View File
@@ -1 +0,0 @@
pub use cloud_objects::drive::*;
@@ -1 +1,2 @@
pub mod sharing;
pub use cloud_objects::drive::*;
@@ -1,11 +1,11 @@
use std::str::FromStr;
use cloud_objects::cloud_object::Owner;
use galaxy_graphql::object_permissions::AccessLevel;
use serde::{Deserialize, Serialize};
use session_sharing_protocol::common::{ProfileData as SessionSharingProfileData, Role};
use crate::auth::UserUid;
use crate::cloud_object::Owner;
use crate::ids::ServerId;
#[derive(Copy, Clone, Debug, Eq, PartialEq, PartialOrd, Ord, Serialize, Deserialize)]
@@ -1,10 +1,10 @@
use std::borrow::Cow;
use anyhow::{Result, anyhow};
use galaxy_graphql::client::{GraphQLError, Operation};
use galaxyui_core::r#async::BoxFuture;
use http::StatusCode;
use instant::Duration;
use warp_graphql::client::{GraphQLError, Operation};
use galaxyui_core::r#async::BoxFuture;
use crate::auth::AuthEvent;
use crate::base_client::BaseClient;
@@ -6,8 +6,8 @@ use std::sync::atomic::{AtomicUsize, Ordering};
use cynic::{GraphQlError, GraphQlResponse};
use futures::executor::block_on;
use galaxy_graphql::client::{GraphQLError, RequestOptions};
use http::StatusCode;
use warp_graphql::client::{GraphQLError, RequestOptions};
use warp_server_auth::auth_state::AuthState;
use super::send_graphql_request;
@@ -124,7 +124,7 @@ impl FakeGraphqlOperation {
}
}
impl warp_graphql::client::Operation<()> for FakeGraphqlOperation {
impl galaxy_graphql::client::Operation<()> for FakeGraphqlOperation {
fn operation_name(&self) -> Option<Cow<'_, str>> {
Some(Cow::Borrowed("FakeGraphqlOperation"))
}
+1 -1
View File
@@ -4,10 +4,10 @@ use std::time::{Duration, SystemTime, UNIX_EPOCH};
use anyhow::Result;
use base64::Engine;
use blocking::unblock;
use instant::Instant;
use galaxy_core::channel::IapConfig;
use galaxyui_core::r#async::{BoxFuture, FutureExt as _, Timer};
use galaxyui_core::{AppContext, Entity, ModelContext, SingletonEntity};
use instant::Instant;
#[cfg(not(target_family = "wasm"))]
use websocket::connect_error_http_response;
+1 -1
View File
@@ -1,8 +1,8 @@
use std::time::{Duration, SystemTime, UNIX_EPOCH};
use base64::Engine;
use instant::Instant;
use galaxy_core::channel::IapConfig;
use instant::Instant;
use super::*;
@@ -7,7 +7,7 @@ use diesel::result::Error;
pub use cloud_objects::{decode_guests, decode_link_sharing, encode_guests, encode_link_sharing};
use crate::cloud_object::{
use cloud_objects::cloud_object::{
CloudObjectMetadata, CloudObjectPermissions, ObjectIdType, ObjectType, Owner,
};
use crate::ids::SyncId;
@@ -1,7 +1,7 @@
use anyhow::{Context as _, Result};
use serde::de::DeserializeOwned;
use galaxy_core::channel::ChannelState;
use galaxy_core::errors::{ErrorExt, register_error};
use serde::de::DeserializeOwned;
use crate::base_client::{AmbientHeaderPolicy, BaseClient};