Compare commits
No commits in common. "577726f3bdcb4b8520cd8d79b5f1cdc96a1ea68a" and "b3c1e37fa4838ec88e6886e9c987d2cead0824c0" have entirely different histories.
577726f3bd
...
b3c1e37fa4
|
@ -209,7 +209,7 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
|
|||
|
||||
[[package]]
|
||||
name = "chorus"
|
||||
version = "0.14.0"
|
||||
version = "0.13.0"
|
||||
dependencies = [
|
||||
"async-trait",
|
||||
"base64 0.21.7",
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
[package]
|
||||
name = "chorus"
|
||||
description = "A library for interacting with multiple Spacebar-compatible Instances at once."
|
||||
version = "0.14.0"
|
||||
version = "0.13.0"
|
||||
license = "AGPL-3.0"
|
||||
edition = "2021"
|
||||
repository = "https://github.com/polyphony-chat/chorus"
|
||||
|
|
|
@ -44,7 +44,7 @@ To get started with Chorus, import it into your project by adding the following
|
|||
|
||||
```toml
|
||||
[dependencies]
|
||||
chorus = "0.14.0"
|
||||
chorus = "0.13.0"
|
||||
```
|
||||
|
||||
### Establishing a Connection
|
||||
|
|
|
@ -1,8 +1,14 @@
|
|||
use chorus::instance::Instance;
|
||||
use chorus::UrlBundle;
|
||||
|
||||
#[tokio::main(flavor = "current_thread")]
|
||||
async fn main() {
|
||||
let instance = Instance::new("https://example.com/")
|
||||
let bundle = UrlBundle::new(
|
||||
"https://example.com/api".to_string(),
|
||||
"wss://example.com/".to_string(),
|
||||
"https://example.com/cdn".to_string(),
|
||||
);
|
||||
let instance = Instance::new(bundle)
|
||||
.await
|
||||
.expect("Failed to connect to the Spacebar server");
|
||||
dbg!(instance.instance_info);
|
||||
|
|
|
@ -1,9 +1,15 @@
|
|||
use chorus::instance::Instance;
|
||||
use chorus::types::LoginSchema;
|
||||
use chorus::UrlBundle;
|
||||
|
||||
#[tokio::main(flavor = "current_thread")]
|
||||
async fn main() {
|
||||
let mut instance = Instance::new("https://example.com/")
|
||||
let bundle = UrlBundle::new(
|
||||
"https://example.com/api".to_string(),
|
||||
"wss://example.com/".to_string(),
|
||||
"https://example.com/cdn".to_string(),
|
||||
);
|
||||
let mut instance = Instance::new(bundle)
|
||||
.await
|
||||
.expect("Failed to connect to the Spacebar server");
|
||||
// Assume, you already have an account created on this instance. Registering an account works
|
||||
|
|
|
@ -73,7 +73,7 @@ impl PartialEq for LimitsInformation {
|
|||
|
||||
impl Instance {
|
||||
/// Creates a new [`Instance`] from the [relevant instance urls](UrlBundle). To create an Instance from one singular url, use [`Instance::from_root_url()`].
|
||||
async fn from_url_bundle(urls: UrlBundle) -> ChorusResult<Instance> {
|
||||
pub async fn new(urls: UrlBundle) -> ChorusResult<Instance> {
|
||||
let is_limited: Option<LimitsConfiguration> = Instance::is_limited(&urls.api).await?;
|
||||
let limit_information;
|
||||
|
||||
|
@ -114,9 +114,9 @@ impl Instance {
|
|||
/// Shorthand for `Instance::new(UrlBundle::from_root_domain(root_domain).await?)`.
|
||||
///
|
||||
/// If `limited` is `true`, then Chorus will track and enforce rate limits for this instance.
|
||||
pub async fn new(root_url: &str) -> ChorusResult<Instance> {
|
||||
pub async fn from_root_url(root_url: &str) -> ChorusResult<Instance> {
|
||||
let urls = UrlBundle::from_root_url(root_url).await?;
|
||||
Instance::from_url_bundle(urls).await
|
||||
Instance::new(urls).await
|
||||
}
|
||||
|
||||
pub async fn is_limited(api_url: &str) -> ChorusResult<Option<LimitsConfiguration>> {
|
||||
|
|
16
src/lib.rs
16
src/lib.rs
|
@ -140,12 +140,6 @@ pub mod voice;
|
|||
/// # Notes
|
||||
/// All the urls can be found on the /api/policies/instance/domains endpoint of a spacebar server
|
||||
pub struct UrlBundle {
|
||||
/// The root url of an Instance. Usually, this would be the url where `.well-known/spacebar` can
|
||||
/// be located under. If the instance you are connecting to for some reason does not have a
|
||||
/// `.well-known` set up (for example, if it is a local/testing instance), you can use the api
|
||||
/// url as a substitute.
|
||||
/// Ex: `https://spacebar.chat`
|
||||
pub root: String,
|
||||
/// The api's url.
|
||||
/// Ex: `https://old.server.spacebar.chat/api`
|
||||
pub api: String,
|
||||
|
@ -160,9 +154,8 @@ pub struct UrlBundle {
|
|||
|
||||
impl UrlBundle {
|
||||
/// Creates a new UrlBundle from the relevant urls.
|
||||
pub fn new(root: String, api: String, wss: String, cdn: String) -> Self {
|
||||
pub fn new(api: String, wss: String, cdn: String) -> Self {
|
||||
Self {
|
||||
root: UrlBundle::parse_url(root),
|
||||
api: UrlBundle::parse_url(api),
|
||||
wss: UrlBundle::parse_url(wss),
|
||||
cdn: UrlBundle::parse_url(cdn),
|
||||
|
@ -247,12 +240,7 @@ impl UrlBundle {
|
|||
.json::<types::types::domains_configuration::Domains>()
|
||||
.await
|
||||
{
|
||||
Ok(UrlBundle::new(
|
||||
url.to_string(),
|
||||
body.api_endpoint,
|
||||
body.gateway,
|
||||
body.cdn,
|
||||
))
|
||||
Ok(UrlBundle::new(body.api_endpoint, body.gateway, body.cdn))
|
||||
} else {
|
||||
Err(ChorusError::RequestFailed {
|
||||
url: url.to_string(),
|
||||
|
|
|
@ -39,9 +39,10 @@ pub enum VoiceProtocol {
|
|||
///
|
||||
/// See <https://discord-userdoccers.vercel.app/topics/voice-connections#protocol-data-structure>
|
||||
pub struct SelectProtocolData {
|
||||
/// Our external ip we got from ip discovery
|
||||
pub address: String,
|
||||
/// Our external udp port we got from id discovery
|
||||
/// Our external ip
|
||||
// FIXME: This is a string
|
||||
pub address: Vec<u8>,
|
||||
/// Our external udp port
|
||||
pub port: u16,
|
||||
/// The mode of encryption to use
|
||||
pub mode: VoiceEncryptionMode,
|
||||
|
|
|
@ -111,8 +111,6 @@ impl Observer<VoiceReady> for VoiceHandler {
|
|||
|
||||
*self.voice_udp_connection.lock().await = Some(udp_handle.clone());
|
||||
|
||||
let string_ip_address = String::from_utf8(ip_discovery.address).expect("Ip discovery gave non string ip");
|
||||
|
||||
self.voice_gateway_connection
|
||||
.lock()
|
||||
.await
|
||||
|
@ -121,7 +119,7 @@ impl Observer<VoiceReady> for VoiceHandler {
|
|||
.send_select_protocol(SelectProtocol {
|
||||
protocol: VoiceProtocol::Udp,
|
||||
data: SelectProtocolData {
|
||||
address: string_ip_address,
|
||||
address: ip_discovery.address,
|
||||
port: ip_discovery.port,
|
||||
mode: VoiceEncryptionMode::Xsalsa20Poly1305,
|
||||
},
|
||||
|
|
|
@ -52,7 +52,12 @@ impl TestBundle {
|
|||
|
||||
// Set up a test by creating an Instance and a User. Reduces Test boilerplate.
|
||||
pub(crate) async fn setup() -> TestBundle {
|
||||
let instance = Instance::new("http://localhost:3001/api").await.unwrap();
|
||||
let urls = UrlBundle::new(
|
||||
"http://localhost:3001/api".to_string(),
|
||||
"ws://localhost:3001".to_string(),
|
||||
"http://localhost:3001".to_string(),
|
||||
);
|
||||
let instance = Instance::new(urls.clone()).await.unwrap();
|
||||
// Requires the existance of the below user.
|
||||
let reg = RegisterSchema {
|
||||
username: "integrationtestuser".into(),
|
||||
|
@ -109,12 +114,6 @@ pub(crate) async fn setup() -> TestBundle {
|
|||
.await
|
||||
.unwrap();
|
||||
|
||||
let urls = UrlBundle::new(
|
||||
"http://localhost:3001/api".to_string(),
|
||||
"http://localhost:3001/api".to_string(),
|
||||
"ws://localhost:3001".to_string(),
|
||||
"http://localhost:3001".to_string(),
|
||||
);
|
||||
TestBundle {
|
||||
urls,
|
||||
user,
|
||||
|
|
Loading…
Reference in New Issue