diff --git a/Cargo.toml b/Cargo.toml index 8010234..f36ce47 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "vrchatapi" -version = "1.18.0" +version = "1.18.1" authors = ["vrchatapi.lpv0t@aries.fyi"] description = "VRChat API Client for Rust" license = "MIT" diff --git a/docs/ApiConfig.md b/docs/ApiConfig.md index 92ae61b..bd69330 100644 --- a/docs/ApiConfig.md +++ b/docs/ApiConfig.md @@ -9,28 +9,41 @@ Name | Type | Description | Notes **address** | **String** | VRChat's office address | **announcements** | [**Vec**](APIConfigAnnouncement.md) | Public Announcements | **app_name** | **String** | Game name | [default to VrChat] +**available_language_codes** | **Vec** | List of supported Languages | +**available_languages** | **Vec** | List of supported Languages | **build_version_tag** | **String** | Build tag of the API server | **client_api_key** | **String** | apiKey to be used for all other requests | **client_bps_ceiling** | **i32** | Unknown | [default to 18432] **client_disconnect_timeout** | **i32** | Unknown | [default to 30000] +**client_net_dispatch_thread** | Option<**bool**> | Unknown | [optional][default to false] +**client_net_in_thread** | Option<**bool**> | Unknown | [optional][default to false] +**client_net_in_thread2** | Option<**bool**> | Unknown | [optional][default to false] +**client_net_in_thread_mobile** | Option<**bool**> | Unknown | [optional][default to false] +**client_net_in_thread_mobile2** | Option<**bool**> | Unknown | [optional][default to false] +**client_net_out_thread** | Option<**bool**> | Unknown | [optional][default to false] +**client_net_out_thread2** | Option<**bool**> | Unknown | [optional][default to false] +**client_net_out_thread_mobile** | Option<**bool**> | Unknown | [optional][default to false] +**client_net_out_thread_mobile2** | Option<**bool**> | Unknown | [optional][default to false] +**client_qr** | Option<**i32**> | Unknown | [optional][default to 1] **client_reserved_player_bps** | **i32** | Unknown | [default to 7168] **client_sent_count_allowance** | **i32** | Unknown | [default to 15] **contact_email** | **String** | VRChat's contact email | **copyright_email** | **String** | VRChat's copyright-issues-related email | +**current_privacy_version** | Option<**i32**> | Current version number of the Privacy Agreement | [optional][default to 1] **current_tos_version** | **i32** | Current version number of the Terms of Service | **default_avatar** | **String** | | **deployment_group** | [**models::DeploymentGroup**](DeploymentGroup.md) | | -**dev_app_version_standalone** | **String** | Version number for game development build | -**dev_download_link_windows** | **String** | Developer Download link | +**dev_language_codes** | Option<**Vec**> | Unknown | [optional] **dev_sdk_url** | **String** | Link to download the development SDK, use downloadUrls instead | **dev_sdk_version** | **String** | Version of the development SDK | -**dev_server_version_standalone** | **String** | Version number for server development build | **dis_countdown** | **String** | Unknown, \"dis\" maybe for disconnect? | +**disable_av_pro_in_proton** | Option<**bool**> | Unknown | [optional][default to false] **disable_avatar_copying** | **bool** | Toggles if copying avatars should be disabled | [default to false] **disable_avatar_gating** | **bool** | Toggles if avatar gating should be disabled. Avatar gating restricts uploading of avatars to people with the `system_avatar_access` Tag or `admin_avatar_access` Tag | [default to false] **disable_community_labs** | **bool** | Toggles if the Community Labs should be disabled | [default to false] **disable_community_labs_promotion** | **bool** | Toggles if promotion out of Community Labs should be disabled | [default to false] **disable_email** | **bool** | Unknown | [default to false] +**disable_captcha** | Option<**bool**> | Unknown | [optional][default to true] **disable_event_stream** | **bool** | Toggles if Analytics should be disabled. | [default to false] **disable_feedback_gating** | **bool** | Toggles if feedback gating should be disabled. Feedback gating restricts submission of feedback (reporting a World or User) to people with the `system_feedback_access` Tag. | [default to false] **disable_frontend_builds** | **bool** | Unknown, probably toggles compilation of frontend web builds? So internal flag? | [default to false] @@ -44,26 +57,23 @@ Name | Type | Description | Notes **download_link_windows** | **String** | Download link for game on the Oculus Rift website. | **download_urls** | [**models::ApiConfigDownloadUrlList**](APIConfigDownloadURLList.md) | | **dynamic_world_rows** | [**Vec**](DynamicContentRow.md) | Array of DynamicWorldRow objects, used by the game to display the list of world rows | +**economy_pause_end** | Option<**String**> | Unknown | [optional] +**economy_pause_start** | Option<**String**> | Unknown | [optional] +**economy_state** | Option<**i32**> | Unknown | [optional][default to 1] **events** | [**models::ApiConfigEvents**](APIConfigEvents.md) | | -**gear_demo_room_id** | **String** | Unknown | **home_world_id** | **String** | WorldID be \"offline\" on User profiles if you are not friends with that user. | **homepage_redirect_target** | **String** | Redirect target if you try to open the base API domain in your browser | [default to https://hello.vrchat.com] **hub_world_id** | **String** | WorldID be \"offline\" on User profiles if you are not friends with that user. | +**image_host_url_list** | **Vec** | A list of explicitly allowed origins that worlds can request images from via the Udon's [VRCImageDownloader#DownloadImage](https://creators.vrchat.com/worlds/udon/image-loading/#downloadimage). | **jobs_email** | **String** | VRChat's job application email | -**message_of_the_day** | **String** | MOTD | **moderation_email** | **String** | VRChat's moderation related email | -**moderation_query_period** | **i32** | Unknown | **not_allowed_to_select_avatar_in_private_world_message** | **String** | Used in-game to notify a user they aren't allowed to select avatars in private worlds | -**plugin** | **String** | Extra [plugin](https://doc.photonengine.com/en-us/server/current/plugins/manual) to run in each instance | -**release_app_version_standalone** | **String** | Version number for game release build | -**release_sdk_url** | **String** | Link to download the release SDK | -**release_sdk_version** | **String** | Version of the release SDK | -**release_server_version_standalone** | **String** | Version number for server release build | **sdk_developer_faq_url** | **String** | Link to the developer FAQ | **sdk_discord_url** | **String** | Link to the official VRChat Discord | **sdk_not_allowed_to_publish_message** | **String** | Used in the SDK to notify a user they aren't allowed to upload avatars/worlds yet | **sdk_unity_version** | **String** | Unity version supported by the SDK | **server_name** | **String** | Server name of the API server currently responding | +**string_host_url_list** | **Vec** | A list of explicitly allowed origins that worlds can request strings from via the Udon's [VRCStringDownloader.LoadUrl](https://creators.vrchat.com/worlds/udon/string-loading/#ivrcstringdownload). | **support_email** | **String** | VRChat's support email | **time_out_world_id** | **String** | WorldID be \"offline\" on User profiles if you are not friends with that user. | **tutorial_world_id** | **String** | WorldID be \"offline\" on User profiles if you are not friends with that user. | @@ -74,15 +84,10 @@ Name | Type | Description | Notes **upload_analysis_percent** | **i32** | Unknown | **url_list** | **Vec** | List of allowed URLs that bypass the \"Allow untrusted URL's\" setting in-game | **use_reliable_udp_for_voice** | **bool** | Unknown | [default to false] -**user_update_period** | **i32** | Unknown | -**user_verification_delay** | **i32** | Unknown | -**user_verification_retry** | **i32** | Unknown | -**user_verification_timeout** | **i32** | Unknown | **vive_windows_url** | **String** | Download link for game on the Steam website. | **white_listed_asset_urls** | **Vec** | List of allowed URLs that are allowed to host avatar assets | -**world_update_period** | **i32** | Unknown | -**player_url_resolver_hash** | **String** | Currently used youtube-dl.exe hash in SHA-256-delimited format | **player_url_resolver_version** | **String** | Currently used youtube-dl.exe version | +**player_url_resolver_sha1** | **String** | Currently used youtube-dl.exe hash in SHA1-delimited format | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/docs/AuthenticationApi.md b/docs/AuthenticationApi.md index ee7d0b4..f818677 100644 --- a/docs/AuthenticationApi.md +++ b/docs/AuthenticationApi.md @@ -17,7 +17,7 @@ Method | HTTP request | Description ## check_user_exists -> models::UserExists check_user_exists(email, display_name, user_id, exclude_user_id) +> models::UserExists check_user_exists(email, display_name, username, exclude_user_id) Check User Exists Checks if a user by a given `username`, `displayName` or `email` exist. This is used during registration to check if a username has already been taken, during change of displayName to check if a displayName is available, and during change of email to check if the email is already used. In the later two cases the `excludeUserId` is used to exclude oneself, otherwise the result would always be true. It is **REQUIRED** to include **AT LEAST** `username`, `displayName` **or** `email` query parameter. Although they can be combined - in addition with `excludeUserId` (generally to exclude yourself) - to further fine-tune the search. @@ -29,7 +29,7 @@ Name | Type | Description | Required | Notes ------------- | ------------- | ------------- | ------------- | ------------- **email** | Option<**String**> | Filter by email. | | **display_name** | Option<**String**> | Filter by displayName. | | -**user_id** | Option<**String**> | Filter by UserID. | | +**username** | Option<**String**> | Filter by Username. | | **exclude_user_id** | Option<**String**> | Exclude by UserID. | | ### Return type diff --git a/docs/FileData.md b/docs/FileData.md index 4cc9bd1..28e9b7e 100644 --- a/docs/FileData.md +++ b/docs/FileData.md @@ -6,7 +6,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **category** | **String** | | [default to Queued] **file_name** | **String** | | -**md5** | **String** | | +**md5** | Option<**String**> | | [optional] **size_in_bytes** | **i32** | | **status** | [**models::FileStatus**](FileStatus.md) | | **upload_id** | **String** | | [default to ] diff --git a/docs/FilesApi.md b/docs/FilesApi.md index 7bd4d72..fdfc4ed 100644 --- a/docs/FilesApi.md +++ b/docs/FilesApi.md @@ -80,7 +80,7 @@ Name | Type | Description | Required | Notes ## delete_file -> models::Success delete_file(file_id) +> models::File delete_file(file_id) Delete File Deletes a File object. @@ -94,7 +94,7 @@ Name | Type | Description | Required | Notes ### Return type -[**models::Success**](Success.md) +[**models::File**](File.md) ### Authorization @@ -165,7 +165,7 @@ Name | Type | Description | Required | Notes ### HTTP request headers - **Content-Type**: Not defined -- **Accept**: Not defined +- **Accept**: application/json [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) diff --git a/docs/Group.md b/docs/Group.md index a0df33a..2d93040 100644 --- a/docs/Group.md +++ b/docs/Group.md @@ -23,8 +23,11 @@ Name | Type | Description | Notes **is_verified** | Option<**bool**> | | [optional][default to false] **join_state** | Option<[**models::GroupJoinState**](GroupJoinState.md)> | | [optional] **tags** | Option<**Vec**> | | [optional] +**transfer_target_id** | Option<**String**> | A users unique ID, usually in the form of `usr_c1644b5b-3ca4-45b4-97c6-a2a0de70d469`. Legacy players can have old IDs in the form of `8JoV9XEdpo`. The ID can never be changed. | [optional] **galleries** | Option<[**Vec**](GroupGallery.md)> | | [optional] **created_at** | Option<**String**> | | [optional] +**updated_at** | Option<**String**> | | [optional] +**last_post_created_at** | Option<**String**> | | [optional] **online_member_count** | Option<**i32**> | | [optional] **membership_status** | Option<[**models::GroupMemberStatus**](GroupMemberStatus.md)> | | [optional] **my_member** | Option<[**models::GroupMyMember**](GroupMyMember.md)> | | [optional] diff --git a/docs/GroupMyMember.md b/docs/GroupMyMember.md index 75c9ddf..7b30321 100644 --- a/docs/GroupMyMember.md +++ b/docs/GroupMyMember.md @@ -8,6 +8,9 @@ Name | Type | Description | Notes **group_id** | Option<**String**> | | [optional] **user_id** | Option<**String**> | A users unique ID, usually in the form of `usr_c1644b5b-3ca4-45b4-97c6-a2a0de70d469`. Legacy players can have old IDs in the form of `8JoV9XEdpo`. The ID can never be changed. | [optional] **role_ids** | Option<**Vec**> | | [optional] +**accepted_by_display_name** | Option<**String**> | | [optional] +**accepted_by_id** | Option<**String**> | A users unique ID, usually in the form of `usr_c1644b5b-3ca4-45b4-97c6-a2a0de70d469`. Legacy players can have old IDs in the form of `8JoV9XEdpo`. The ID can never be changed. | [optional] +**created_at** | Option<**String**> | | [optional] **manager_notes** | Option<**String**> | | [optional] **membership_status** | Option<**String**> | | [optional] **is_subscribed_to_announcements** | Option<**bool**> | | [optional][default to true] @@ -16,6 +19,9 @@ Name | Type | Description | Notes **joined_at** | Option<**String**> | | [optional] **banned_at** | Option<**String**> | | [optional] **has2_fa** | Option<**bool**> | | [optional][default to false] +**has_joined_from_purchase** | Option<**bool**> | | [optional][default to false] +**last_post_read_at** | Option<**String**> | | [optional] +**m_role_ids** | Option<**Vec**> | | [optional] **permissions** | Option<**Vec**> | | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/docs/Permission.md b/docs/Permission.md index 6ce393e..0f60063 100644 --- a/docs/Permission.md +++ b/docs/Permission.md @@ -5,6 +5,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **id** | **String** | | +**owner_display_name** | **String** | | **name** | **String** | | **owner_id** | **String** | A users unique ID, usually in the form of `usr_c1644b5b-3ca4-45b4-97c6-a2a0de70d469`. Legacy players can have old IDs in the form of `8JoV9XEdpo`. The ID can never be changed. | **data** | Option<[**serde_json::Value**](.md)> | | [optional] diff --git a/docs/TransactionAgreement.md b/docs/TransactionAgreement.md index fe1173e..b0021eb 100644 --- a/docs/TransactionAgreement.md +++ b/docs/TransactionAgreement.md @@ -6,6 +6,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **agreement_id** | **String** | | **item_id** | **f64** | | +**agreement** | **String** | | **status** | **String** | This is NOT TransactionStatus, but whatever Steam return. | **period** | **String** | | **frequency** | **f64** | | diff --git a/docs/UserSubscription.md b/docs/UserSubscription.md index 83328b6..54b779e 100644 --- a/docs/UserSubscription.md +++ b/docs/UserSubscription.md @@ -14,6 +14,7 @@ Name | Type | Description | Notes **tier** | **f64** | | **active** | **bool** | | [default to true] **status** | [**models::TransactionStatus**](TransactionStatus.md) | | +**starts** | Option<**String**> | | [optional] **expires** | **String** | | **created_at** | **String** | | **updated_at** | **String** | | diff --git a/docs/WorldsApi.md b/docs/WorldsApi.md index 610ffcf..2ad2aba 100644 --- a/docs/WorldsApi.md +++ b/docs/WorldsApi.md @@ -358,7 +358,7 @@ Name | Type | Description | Required | Notes ## search_worlds -> Vec search_worlds(featured, sort, user, user_id, n, order, offset, search, tag, notag, release_status, max_unity_version, min_unity_version, platform) +> Vec search_worlds(featured, sort, user, user_id, n, order, offset, search, tag, notag, release_status, max_unity_version, min_unity_version, platform, fuzzy) Search All Worlds Search and list any worlds by query filters. @@ -382,6 +382,7 @@ Name | Type | Description | Required | Notes **max_unity_version** | Option<**String**> | The maximum Unity version supported by the asset. | | **min_unity_version** | Option<**String**> | The minimum Unity version supported by the asset. | | **platform** | Option<**String**> | The platform the asset supports. | | +**fuzzy** | Option<**bool**> | | | ### Return type diff --git a/src/apis/authentication_api.rs b/src/apis/authentication_api.rs index 60cb432..7b63769 100644 --- a/src/apis/authentication_api.rs +++ b/src/apis/authentication_api.rs @@ -79,7 +79,7 @@ pub enum VerifyRecoveryCodeError { /// Checks if a user by a given `username`, `displayName` or `email` exist. This is used during registration to check if a username has already been taken, during change of displayName to check if a displayName is available, and during change of email to check if the email is already used. In the later two cases the `excludeUserId` is used to exclude oneself, otherwise the result would always be true. It is **REQUIRED** to include **AT LEAST** `username`, `displayName` **or** `email` query parameter. Although they can be combined - in addition with `excludeUserId` (generally to exclude yourself) - to further fine-tune the search. -pub async fn check_user_exists(configuration: &configuration::Configuration, email: Option<&str>, display_name: Option<&str>, user_id: Option<&str>, exclude_user_id: Option<&str>) -> Result> { +pub async fn check_user_exists(configuration: &configuration::Configuration, email: Option<&str>, display_name: Option<&str>, username: Option<&str>, exclude_user_id: Option<&str>) -> Result> { let local_var_configuration = configuration; let local_var_client = &local_var_configuration.client; @@ -93,8 +93,8 @@ pub async fn check_user_exists(configuration: &configuration::Configuration, ema if let Some(ref local_var_str) = display_name { local_var_req_builder = local_var_req_builder.query(&[("displayName", &local_var_str.to_string())]); } - if let Some(ref local_var_str) = user_id { - local_var_req_builder = local_var_req_builder.query(&[("userId", &local_var_str.to_string())]); + if let Some(ref local_var_str) = username { + local_var_req_builder = local_var_req_builder.query(&[("username", &local_var_str.to_string())]); } if let Some(ref local_var_str) = exclude_user_id { local_var_req_builder = local_var_req_builder.query(&[("excludeUserId", &local_var_str.to_string())]); diff --git a/src/apis/files_api.rs b/src/apis/files_api.rs index 1a4d8bf..edff673 100644 --- a/src/apis/files_api.rs +++ b/src/apis/files_api.rs @@ -48,6 +48,7 @@ pub enum DeleteFileVersionError { #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(untagged)] pub enum DownloadFileVersionError { + Status404(models::Error), UnknownValue(serde_json::Value), } @@ -148,7 +149,7 @@ pub async fn create_file_version(configuration: &configuration::Configuration, f } /// Deletes a File object. -pub async fn delete_file(configuration: &configuration::Configuration, file_id: &str) -> Result> { +pub async fn delete_file(configuration: &configuration::Configuration, file_id: &str) -> Result> { let local_var_configuration = configuration; let local_var_client = &local_var_configuration.client; diff --git a/src/apis/groups_api.rs b/src/apis/groups_api.rs index 43bbfb3..2bc86e6 100644 --- a/src/apis/groups_api.rs +++ b/src/apis/groups_api.rs @@ -201,6 +201,7 @@ pub enum GetGroupAuditLogsError { #[serde(untagged)] pub enum GetGroupBansError { Status401(models::Error), + Status403(models::Error), Status404(models::Error), UnknownValue(serde_json::Value), } @@ -238,6 +239,7 @@ pub enum GetGroupInvitesError { #[serde(untagged)] pub enum GetGroupMemberError { Status401(models::Error), + Status403(models::Error), Status404(models::Error), UnknownValue(serde_json::Value), } diff --git a/src/apis/worlds_api.rs b/src/apis/worlds_api.rs index 57c5eae..993304e 100644 --- a/src/apis/worlds_api.rs +++ b/src/apis/worlds_api.rs @@ -522,7 +522,7 @@ pub async fn publish_world(configuration: &configuration::Configuration, world_i } /// Search and list any worlds by query filters. -pub async fn search_worlds(configuration: &configuration::Configuration, featured: Option, sort: Option, user: Option<&str>, user_id: Option<&str>, n: Option, order: Option, offset: Option, search: Option<&str>, tag: Option<&str>, notag: Option<&str>, release_status: Option, max_unity_version: Option<&str>, min_unity_version: Option<&str>, platform: Option<&str>) -> Result, Error> { +pub async fn search_worlds(configuration: &configuration::Configuration, featured: Option, sort: Option, user: Option<&str>, user_id: Option<&str>, n: Option, order: Option, offset: Option, search: Option<&str>, tag: Option<&str>, notag: Option<&str>, release_status: Option, max_unity_version: Option<&str>, min_unity_version: Option<&str>, platform: Option<&str>, fuzzy: Option) -> Result, Error> { let local_var_configuration = configuration; let local_var_client = &local_var_configuration.client; @@ -572,6 +572,9 @@ pub async fn search_worlds(configuration: &configuration::Configuration, feature if let Some(ref local_var_str) = platform { local_var_req_builder = local_var_req_builder.query(&[("platform", &local_var_str.to_string())]); } + if let Some(ref local_var_str) = fuzzy { + local_var_req_builder = local_var_req_builder.query(&[("fuzzy", &local_var_str.to_string())]); + } if let Some(ref local_var_user_agent) = local_var_configuration.user_agent { local_var_req_builder = local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone()); } diff --git a/src/models/api_config.rs b/src/models/api_config.rs index eb0ff18..6cfd2b5 100644 --- a/src/models/api_config.rs +++ b/src/models/api_config.rs @@ -27,6 +27,12 @@ pub struct ApiConfig { /// Game name #[serde(rename = "appName")] pub app_name: String, + /// List of supported Languages + #[serde(rename = "availableLanguageCodes")] + pub available_language_codes: Vec, + /// List of supported Languages + #[serde(rename = "availableLanguages")] + pub available_languages: Vec, /// Build tag of the API server #[serde(rename = "buildVersionTag")] pub build_version_tag: String, @@ -40,6 +46,36 @@ pub struct ApiConfig { #[serde(rename = "clientDisconnectTimeout")] pub client_disconnect_timeout: i32, /// Unknown + #[serde(rename = "clientNetDispatchThread", skip_serializing_if = "Option::is_none")] + pub client_net_dispatch_thread: Option, + /// Unknown + #[serde(rename = "clientNetInThread", skip_serializing_if = "Option::is_none")] + pub client_net_in_thread: Option, + /// Unknown + #[serde(rename = "clientNetInThread2", skip_serializing_if = "Option::is_none")] + pub client_net_in_thread2: Option, + /// Unknown + #[serde(rename = "clientNetInThreadMobile", skip_serializing_if = "Option::is_none")] + pub client_net_in_thread_mobile: Option, + /// Unknown + #[serde(rename = "clientNetInThreadMobile2", skip_serializing_if = "Option::is_none")] + pub client_net_in_thread_mobile2: Option, + /// Unknown + #[serde(rename = "clientNetOutThread", skip_serializing_if = "Option::is_none")] + pub client_net_out_thread: Option, + /// Unknown + #[serde(rename = "clientNetOutThread2", skip_serializing_if = "Option::is_none")] + pub client_net_out_thread2: Option, + /// Unknown + #[serde(rename = "clientNetOutThreadMobile", skip_serializing_if = "Option::is_none")] + pub client_net_out_thread_mobile: Option, + /// Unknown + #[serde(rename = "clientNetOutThreadMobile2", skip_serializing_if = "Option::is_none")] + pub client_net_out_thread_mobile2: Option, + /// Unknown + #[serde(rename = "clientQR", skip_serializing_if = "Option::is_none")] + pub client_qr: Option, + /// Unknown #[serde(rename = "clientReservedPlayerBPS")] pub client_reserved_player_bps: i32, /// Unknown @@ -51,6 +87,9 @@ pub struct ApiConfig { /// VRChat's copyright-issues-related email #[serde(rename = "copyrightEmail")] pub copyright_email: String, + /// Current version number of the Privacy Agreement + #[serde(rename = "currentPrivacyVersion", skip_serializing_if = "Option::is_none")] + pub current_privacy_version: Option, /// Current version number of the Terms of Service #[serde(rename = "currentTOSVersion")] pub current_tos_version: i32, @@ -58,24 +97,21 @@ pub struct ApiConfig { pub default_avatar: String, #[serde(rename = "deploymentGroup")] pub deployment_group: models::DeploymentGroup, - /// Version number for game development build - #[serde(rename = "devAppVersionStandalone")] - pub dev_app_version_standalone: String, - /// Developer Download link - #[serde(rename = "devDownloadLinkWindows")] - pub dev_download_link_windows: String, + /// Unknown + #[serde(rename = "devLanguageCodes", skip_serializing_if = "Option::is_none")] + pub dev_language_codes: Option>, /// Link to download the development SDK, use downloadUrls instead #[serde(rename = "devSdkUrl")] pub dev_sdk_url: String, /// Version of the development SDK #[serde(rename = "devSdkVersion")] pub dev_sdk_version: String, - /// Version number for server development build - #[serde(rename = "devServerVersionStandalone")] - pub dev_server_version_standalone: String, /// Unknown, \"dis\" maybe for disconnect? #[serde(rename = "dis-countdown")] pub dis_countdown: String, + /// Unknown + #[serde(rename = "disableAVProInProton", skip_serializing_if = "Option::is_none")] + pub disable_av_pro_in_proton: Option, /// Toggles if copying avatars should be disabled #[serde(rename = "disableAvatarCopying")] pub disable_avatar_copying: bool, @@ -91,6 +127,9 @@ pub struct ApiConfig { /// Unknown #[serde(rename = "disableEmail")] pub disable_email: bool, + /// Unknown + #[serde(rename = "disableCaptcha", skip_serializing_if = "Option::is_none")] + pub disable_captcha: Option, /// Toggles if Analytics should be disabled. #[serde(rename = "disableEventStream")] pub disable_event_stream: bool, @@ -129,11 +168,17 @@ pub struct ApiConfig { /// Array of DynamicWorldRow objects, used by the game to display the list of world rows #[serde(rename = "dynamicWorldRows")] pub dynamic_world_rows: Vec, + /// Unknown + #[serde(rename = "economyPauseEnd", skip_serializing_if = "Option::is_none")] + pub economy_pause_end: Option, + /// Unknown + #[serde(rename = "economyPauseStart", skip_serializing_if = "Option::is_none")] + pub economy_pause_start: Option, + /// Unknown + #[serde(rename = "economyState", skip_serializing_if = "Option::is_none")] + pub economy_state: Option, #[serde(rename = "events")] pub events: Box, - /// Unknown - #[serde(rename = "gearDemoRoomId")] - pub gear_demo_room_id: String, /// WorldID be \"offline\" on User profiles if you are not friends with that user. #[serde(rename = "homeWorldId")] pub home_world_id: String, @@ -143,36 +188,18 @@ pub struct ApiConfig { /// WorldID be \"offline\" on User profiles if you are not friends with that user. #[serde(rename = "hubWorldId")] pub hub_world_id: String, + /// A list of explicitly allowed origins that worlds can request images from via the Udon's [VRCImageDownloader#DownloadImage](https://creators.vrchat.com/worlds/udon/image-loading/#downloadimage). + #[serde(rename = "imageHostUrlList")] + pub image_host_url_list: Vec, /// VRChat's job application email #[serde(rename = "jobsEmail")] pub jobs_email: String, - /// MOTD - #[serde(rename = "messageOfTheDay")] - pub message_of_the_day: String, /// VRChat's moderation related email #[serde(rename = "moderationEmail")] pub moderation_email: String, - /// Unknown - #[serde(rename = "moderationQueryPeriod")] - pub moderation_query_period: i32, /// Used in-game to notify a user they aren't allowed to select avatars in private worlds #[serde(rename = "notAllowedToSelectAvatarInPrivateWorldMessage")] pub not_allowed_to_select_avatar_in_private_world_message: String, - /// Extra [plugin](https://doc.photonengine.com/en-us/server/current/plugins/manual) to run in each instance - #[serde(rename = "plugin")] - pub plugin: String, - /// Version number for game release build - #[serde(rename = "releaseAppVersionStandalone")] - pub release_app_version_standalone: String, - /// Link to download the release SDK - #[serde(rename = "releaseSdkUrl")] - pub release_sdk_url: String, - /// Version of the release SDK - #[serde(rename = "releaseSdkVersion")] - pub release_sdk_version: String, - /// Version number for server release build - #[serde(rename = "releaseServerVersionStandalone")] - pub release_server_version_standalone: String, /// Link to the developer FAQ #[serde(rename = "sdkDeveloperFaqUrl")] pub sdk_developer_faq_url: String, @@ -188,6 +215,9 @@ pub struct ApiConfig { /// Server name of the API server currently responding #[serde(rename = "serverName")] pub server_name: String, + /// A list of explicitly allowed origins that worlds can request strings from via the Udon's [VRCStringDownloader.LoadUrl](https://creators.vrchat.com/worlds/udon/string-loading/#ivrcstringdownload). + #[serde(rename = "stringHostUrlList")] + pub string_host_url_list: Vec, /// VRChat's support email #[serde(rename = "supportEmail")] pub support_email: String, @@ -218,65 +248,63 @@ pub struct ApiConfig { /// Unknown #[serde(rename = "useReliableUdpForVoice")] pub use_reliable_udp_for_voice: bool, - /// Unknown - #[serde(rename = "userUpdatePeriod")] - pub user_update_period: i32, - /// Unknown - #[serde(rename = "userVerificationDelay")] - pub user_verification_delay: i32, - /// Unknown - #[serde(rename = "userVerificationRetry")] - pub user_verification_retry: i32, - /// Unknown - #[serde(rename = "userVerificationTimeout")] - pub user_verification_timeout: i32, /// Download link for game on the Steam website. #[serde(rename = "viveWindowsUrl")] pub vive_windows_url: String, /// List of allowed URLs that are allowed to host avatar assets #[serde(rename = "whiteListedAssetUrls")] pub white_listed_asset_urls: Vec, - /// Unknown - #[serde(rename = "worldUpdatePeriod")] - pub world_update_period: i32, - /// Currently used youtube-dl.exe hash in SHA-256-delimited format - #[serde(rename = "player-url-resolver-hash")] - pub player_url_resolver_hash: String, /// Currently used youtube-dl.exe version #[serde(rename = "player-url-resolver-version")] pub player_url_resolver_version: String, + /// Currently used youtube-dl.exe hash in SHA1-delimited format + #[serde(rename = "player-url-resolver-sha1")] + pub player_url_resolver_sha1: String, } impl ApiConfig { - pub fn new(voice_enable_degradation: bool, voice_enable_receiver_limiting: bool, address: String, announcements: Vec, app_name: String, build_version_tag: String, client_api_key: String, client_bps_ceiling: i32, client_disconnect_timeout: i32, client_reserved_player_bps: i32, client_sent_count_allowance: i32, contact_email: String, copyright_email: String, current_tos_version: i32, default_avatar: String, deployment_group: models::DeploymentGroup, dev_app_version_standalone: String, dev_download_link_windows: String, dev_sdk_url: String, dev_sdk_version: String, dev_server_version_standalone: String, dis_countdown: String, disable_avatar_copying: bool, disable_avatar_gating: bool, disable_community_labs: bool, disable_community_labs_promotion: bool, disable_email: bool, disable_event_stream: bool, disable_feedback_gating: bool, disable_frontend_builds: bool, disable_hello: bool, disable_oculus_subs: bool, disable_registration: bool, disable_steam_networking: bool, disable_two_factor_auth: bool, disable_udon: bool, disable_upgrade_account: bool, download_link_windows: String, download_urls: models::ApiConfigDownloadUrlList, dynamic_world_rows: Vec, events: models::ApiConfigEvents, gear_demo_room_id: String, home_world_id: String, homepage_redirect_target: String, hub_world_id: String, jobs_email: String, message_of_the_day: String, moderation_email: String, moderation_query_period: i32, not_allowed_to_select_avatar_in_private_world_message: String, plugin: String, release_app_version_standalone: String, release_sdk_url: String, release_sdk_version: String, release_server_version_standalone: String, sdk_developer_faq_url: String, sdk_discord_url: String, sdk_not_allowed_to_publish_message: String, sdk_unity_version: String, server_name: String, support_email: String, time_out_world_id: String, tutorial_world_id: String, update_rate_ms_maximum: i32, update_rate_ms_minimum: i32, update_rate_ms_normal: i32, update_rate_ms_udon_manual: i32, upload_analysis_percent: i32, url_list: Vec, use_reliable_udp_for_voice: bool, user_update_period: i32, user_verification_delay: i32, user_verification_retry: i32, user_verification_timeout: i32, vive_windows_url: String, white_listed_asset_urls: Vec, world_update_period: i32, player_url_resolver_hash: String, player_url_resolver_version: String) -> ApiConfig { + pub fn new(voice_enable_degradation: bool, voice_enable_receiver_limiting: bool, address: String, announcements: Vec, app_name: String, available_language_codes: Vec, available_languages: Vec, build_version_tag: String, client_api_key: String, client_bps_ceiling: i32, client_disconnect_timeout: i32, client_reserved_player_bps: i32, client_sent_count_allowance: i32, contact_email: String, copyright_email: String, current_tos_version: i32, default_avatar: String, deployment_group: models::DeploymentGroup, dev_sdk_url: String, dev_sdk_version: String, dis_countdown: String, disable_avatar_copying: bool, disable_avatar_gating: bool, disable_community_labs: bool, disable_community_labs_promotion: bool, disable_email: bool, disable_event_stream: bool, disable_feedback_gating: bool, disable_frontend_builds: bool, disable_hello: bool, disable_oculus_subs: bool, disable_registration: bool, disable_steam_networking: bool, disable_two_factor_auth: bool, disable_udon: bool, disable_upgrade_account: bool, download_link_windows: String, download_urls: models::ApiConfigDownloadUrlList, dynamic_world_rows: Vec, events: models::ApiConfigEvents, home_world_id: String, homepage_redirect_target: String, hub_world_id: String, image_host_url_list: Vec, jobs_email: String, moderation_email: String, not_allowed_to_select_avatar_in_private_world_message: String, sdk_developer_faq_url: String, sdk_discord_url: String, sdk_not_allowed_to_publish_message: String, sdk_unity_version: String, server_name: String, string_host_url_list: Vec, support_email: String, time_out_world_id: String, tutorial_world_id: String, update_rate_ms_maximum: i32, update_rate_ms_minimum: i32, update_rate_ms_normal: i32, update_rate_ms_udon_manual: i32, upload_analysis_percent: i32, url_list: Vec, use_reliable_udp_for_voice: bool, vive_windows_url: String, white_listed_asset_urls: Vec, player_url_resolver_version: String, player_url_resolver_sha1: String) -> ApiConfig { ApiConfig { voice_enable_degradation, voice_enable_receiver_limiting, address, announcements, app_name, + available_language_codes, + available_languages, build_version_tag, client_api_key, client_bps_ceiling, client_disconnect_timeout, + client_net_dispatch_thread: None, + client_net_in_thread: None, + client_net_in_thread2: None, + client_net_in_thread_mobile: None, + client_net_in_thread_mobile2: None, + client_net_out_thread: None, + client_net_out_thread2: None, + client_net_out_thread_mobile: None, + client_net_out_thread_mobile2: None, + client_qr: None, client_reserved_player_bps, client_sent_count_allowance, contact_email, copyright_email, + current_privacy_version: None, current_tos_version, default_avatar, deployment_group, - dev_app_version_standalone, - dev_download_link_windows, + dev_language_codes: None, dev_sdk_url, dev_sdk_version, - dev_server_version_standalone, dis_countdown, + disable_av_pro_in_proton: None, disable_avatar_copying, disable_avatar_gating, disable_community_labs, disable_community_labs_promotion, disable_email, + disable_captcha: None, disable_event_stream, disable_feedback_gating, disable_frontend_builds, @@ -290,26 +318,23 @@ impl ApiConfig { download_link_windows, download_urls: Box::new(download_urls), dynamic_world_rows, + economy_pause_end: None, + economy_pause_start: None, + economy_state: None, events: Box::new(events), - gear_demo_room_id, home_world_id, homepage_redirect_target, hub_world_id, + image_host_url_list, jobs_email, - message_of_the_day, moderation_email, - moderation_query_period, not_allowed_to_select_avatar_in_private_world_message, - plugin, - release_app_version_standalone, - release_sdk_url, - release_sdk_version, - release_server_version_standalone, sdk_developer_faq_url, sdk_discord_url, sdk_not_allowed_to_publish_message, sdk_unity_version, server_name, + string_host_url_list, support_email, time_out_world_id, tutorial_world_id, @@ -320,15 +345,10 @@ impl ApiConfig { upload_analysis_percent, url_list, use_reliable_udp_for_voice, - user_update_period, - user_verification_delay, - user_verification_retry, - user_verification_timeout, vive_windows_url, white_listed_asset_urls, - world_update_period, - player_url_resolver_hash, player_url_resolver_version, + player_url_resolver_sha1, } } } diff --git a/src/models/file_data.rs b/src/models/file_data.rs index 02773dc..c15ee83 100644 --- a/src/models/file_data.rs +++ b/src/models/file_data.rs @@ -16,8 +16,8 @@ pub struct FileData { pub category: Category, #[serde(rename = "fileName")] pub file_name: String, - #[serde(rename = "md5")] - pub md5: String, + #[serde(rename = "md5", skip_serializing_if = "Option::is_none")] + pub md5: Option, #[serde(rename = "sizeInBytes")] pub size_in_bytes: i32, #[serde(rename = "status")] @@ -29,11 +29,11 @@ pub struct FileData { } impl FileData { - pub fn new(category: Category, file_name: String, md5: String, size_in_bytes: i32, status: models::FileStatus, upload_id: String, url: String) -> FileData { + pub fn new(category: Category, file_name: String, size_in_bytes: i32, status: models::FileStatus, upload_id: String, url: String) -> FileData { FileData { category, file_name, - md5, + md5: None, size_in_bytes, status, upload_id, diff --git a/src/models/group.rs b/src/models/group.rs index cfbd5d3..3b94caa 100644 --- a/src/models/group.rs +++ b/src/models/group.rs @@ -50,10 +50,17 @@ pub struct Group { pub join_state: Option, #[serde(rename = "tags", skip_serializing_if = "Option::is_none")] pub tags: Option>, + /// A users unique ID, usually in the form of `usr_c1644b5b-3ca4-45b4-97c6-a2a0de70d469`. Legacy players can have old IDs in the form of `8JoV9XEdpo`. The ID can never be changed. + #[serde(rename = "transferTargetId", skip_serializing_if = "Option::is_none")] + pub transfer_target_id: Option, #[serde(rename = "galleries", skip_serializing_if = "Option::is_none")] pub galleries: Option>, #[serde(rename = "createdAt", skip_serializing_if = "Option::is_none")] pub created_at: Option, + #[serde(rename = "updatedAt", skip_serializing_if = "Option::is_none")] + pub updated_at: Option, + #[serde(rename = "lastPostCreatedAt", skip_serializing_if = "Option::is_none")] + pub last_post_created_at: Option, #[serde(rename = "onlineMemberCount", skip_serializing_if = "Option::is_none")] pub online_member_count: Option, #[serde(rename = "membershipStatus", skip_serializing_if = "Option::is_none")] @@ -87,8 +94,11 @@ impl Group { is_verified: None, join_state: None, tags: None, + transfer_target_id: None, galleries: None, created_at: None, + updated_at: None, + last_post_created_at: None, online_member_count: None, membership_status: None, my_member: None, diff --git a/src/models/group_my_member.rs b/src/models/group_my_member.rs index 460aa82..33ae2af 100644 --- a/src/models/group_my_member.rs +++ b/src/models/group_my_member.rs @@ -20,6 +20,13 @@ pub struct GroupMyMember { pub user_id: Option, #[serde(rename = "roleIds", skip_serializing_if = "Option::is_none")] pub role_ids: Option>, + #[serde(rename = "acceptedByDisplayName", skip_serializing_if = "Option::is_none")] + pub accepted_by_display_name: Option, + /// A users unique ID, usually in the form of `usr_c1644b5b-3ca4-45b4-97c6-a2a0de70d469`. Legacy players can have old IDs in the form of `8JoV9XEdpo`. The ID can never be changed. + #[serde(rename = "acceptedById", skip_serializing_if = "Option::is_none")] + pub accepted_by_id: Option, + #[serde(rename = "createdAt", skip_serializing_if = "Option::is_none")] + pub created_at: Option, #[serde(rename = "managerNotes", skip_serializing_if = "Option::is_none")] pub manager_notes: Option, #[serde(rename = "membershipStatus", skip_serializing_if = "Option::is_none")] @@ -36,6 +43,12 @@ pub struct GroupMyMember { pub banned_at: Option>, #[serde(rename = "has2FA", skip_serializing_if = "Option::is_none")] pub has2_fa: Option, + #[serde(rename = "hasJoinedFromPurchase", skip_serializing_if = "Option::is_none")] + pub has_joined_from_purchase: Option, + #[serde(rename = "lastPostReadAt", skip_serializing_if = "Option::is_none")] + pub last_post_read_at: Option, + #[serde(rename = "mRoleIds", skip_serializing_if = "Option::is_none")] + pub m_role_ids: Option>, #[serde(rename = "permissions", skip_serializing_if = "Option::is_none")] pub permissions: Option>, } @@ -47,6 +60,9 @@ impl GroupMyMember { group_id: None, user_id: None, role_ids: None, + accepted_by_display_name: None, + accepted_by_id: None, + created_at: None, manager_notes: None, membership_status: None, is_subscribed_to_announcements: None, @@ -55,6 +71,9 @@ impl GroupMyMember { joined_at: None, banned_at: None, has2_fa: None, + has_joined_from_purchase: None, + last_post_read_at: None, + m_role_ids: None, permissions: None, } } diff --git a/src/models/permission.rs b/src/models/permission.rs index a0681b6..e37afd2 100644 --- a/src/models/permission.rs +++ b/src/models/permission.rs @@ -14,6 +14,8 @@ use serde::{Deserialize, Serialize}; pub struct Permission { #[serde(rename = "id")] pub id: String, + #[serde(rename = "ownerDisplayName")] + pub owner_display_name: String, #[serde(rename = "name")] pub name: String, /// A users unique ID, usually in the form of `usr_c1644b5b-3ca4-45b4-97c6-a2a0de70d469`. Legacy players can have old IDs in the form of `8JoV9XEdpo`. The ID can never be changed. @@ -24,9 +26,10 @@ pub struct Permission { } impl Permission { - pub fn new(id: String, name: String, owner_id: String) -> Permission { + pub fn new(id: String, owner_display_name: String, name: String, owner_id: String) -> Permission { Permission { id, + owner_display_name, name, owner_id, data: None, diff --git a/src/models/transaction_agreement.rs b/src/models/transaction_agreement.rs index 606c12b..cfb4b46 100644 --- a/src/models/transaction_agreement.rs +++ b/src/models/transaction_agreement.rs @@ -9,13 +9,15 @@ use crate::models; use serde::{Deserialize, Serialize}; -/// TransactionAgreement : +/// TransactionAgreement : Represents a single Transaction, which is likely between VRChat and Steam. #[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)] pub struct TransactionAgreement { #[serde(rename = "agreementId")] pub agreement_id: String, #[serde(rename = "itemId")] pub item_id: f64, + #[serde(rename = "agreement")] + pub agreement: String, /// This is NOT TransactionStatus, but whatever Steam return. #[serde(rename = "status")] pub status: String, @@ -50,10 +52,12 @@ pub struct TransactionAgreement { } impl TransactionAgreement { - pub fn new(agreement_id: String, item_id: f64, status: String, period: String, frequency: f64, billing_type: String, start_date: String, end_date: String, recurring_amt: f64, currency: String, time_created: String, next_payment: String, last_payment: String, last_amount: f64, last_amount_vat: f64, outstanding: f64, failed_attempts: f64) -> TransactionAgreement { + /// Represents a single Transaction, which is likely between VRChat and Steam. + pub fn new(agreement_id: String, item_id: f64, agreement: String, status: String, period: String, frequency: f64, billing_type: String, start_date: String, end_date: String, recurring_amt: f64, currency: String, time_created: String, next_payment: String, last_payment: String, last_amount: f64, last_amount_vat: f64, outstanding: f64, failed_attempts: f64) -> TransactionAgreement { TransactionAgreement { agreement_id, item_id, + agreement, status, period, frequency, diff --git a/src/models/user_subscription.rs b/src/models/user_subscription.rs index e43f738..6c8fa42 100644 --- a/src/models/user_subscription.rs +++ b/src/models/user_subscription.rs @@ -33,6 +33,8 @@ pub struct UserSubscription { pub active: bool, #[serde(rename = "status")] pub status: models::TransactionStatus, + #[serde(rename = "starts", skip_serializing_if = "Option::is_none")] + pub starts: Option, #[serde(rename = "expires")] pub expires: String, #[serde(rename = "created_at")] @@ -58,6 +60,7 @@ impl UserSubscription { tier, active, status, + starts: None, expires, created_at, updated_at,