Compare commits
15 Commits
e2fb919b5b
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| c8065caf1f | |||
| a068db1595 | |||
| a21c8f5b70 | |||
| 0483588af5 | |||
| 06c8bd9919 | |||
| a0d4ff493f | |||
| e5acb2b435 | |||
| fc9ea660de | |||
| e45f067021 | |||
| fdac73f799 | |||
| fc2f3ef6b4 | |||
| 68d1e9d154 | |||
| e67940a90b | |||
| c36774db3b | |||
| b078dceb66 |
@@ -24,9 +24,13 @@
|
|||||||
<!-- domain= is special it scans the domain from the directory to build the ACL -->
|
<!-- domain= is special it scans the domain from the directory to build the ACL -->
|
||||||
<node type="allow" domain="$${domain}"/>
|
<node type="allow" domain="$${domain}"/>
|
||||||
<!-- use cidr= if you wish to allow ip ranges to this domains acl. -->
|
<!-- use cidr= if you wish to allow ip ranges to this domains acl. -->
|
||||||
<!-- <node type="allow" cidr="192.168.0.0/24"/> -->
|
<node type="allow" cidr="66.234.186.77/32"/>
|
||||||
|
<node type="allow" cidr="76.72.215.16/32"/>
|
||||||
|
<node type="allow" cidr="66.234.186.78/32"/>
|
||||||
|
<node type="allow" cidr="66.234.186.87/32"/>
|
||||||
|
<node type="allow" cidr="66.234.186.88/32"/>
|
||||||
|
<node type="allow" cidr="172.16.0.213/24"/>
|
||||||
</list>
|
</list>
|
||||||
|
|
||||||
</network-lists>
|
</network-lists>
|
||||||
</configuration>
|
</configuration>
|
||||||
|
|
||||||
|
|||||||
@@ -49,12 +49,12 @@
|
|||||||
<permission name="extended-data" value="false"/>
|
<permission name="extended-data" value="false"/>
|
||||||
<permission name="execute-apps" value="true">
|
<permission name="execute-apps" value="true">
|
||||||
<!-- default to "deny" or "allow" -->
|
<!-- default to "deny" or "allow" -->
|
||||||
<application-list default="allow">
|
<application-list default="deny">
|
||||||
<!-- type attr can be "deny" or "allow" nothing defaults to opposite of the list default so allow in this case -->
|
<!-- type attr can be "deny" or "allow" nothing defaults to opposite of the list default so allow in this case -->
|
||||||
<!--
|
|
||||||
<application name="info"/>
|
<application name="info"/>
|
||||||
|
<application name="answer"/>
|
||||||
<application name="hangup"/>
|
<application name="hangup"/>
|
||||||
-->
|
<application name="bridge"/>
|
||||||
</application-list>
|
</application-list>
|
||||||
</permission>
|
</permission>
|
||||||
<permission name="expand-vars-in-tag-body" value="false">
|
<permission name="expand-vars-in-tag-body" value="false">
|
||||||
|
|||||||
@@ -1,18 +1,8 @@
|
|||||||
<include>
|
<include>
|
||||||
<extension name="public_did">
|
<extension name="public_did">
|
||||||
<condition field="destination_number" expression="^(5551212)$">
|
<condition field="destination_number" expression="^1\d{10}$">
|
||||||
<!--
|
|
||||||
If you're hosting multiple domains you will want to set the
|
|
||||||
target_domain on these calls so they hit the proper domain after you
|
|
||||||
transfer the caller into the default context.
|
|
||||||
|
|
||||||
$${domain} is the default domain set from vars.xml but you can set it
|
|
||||||
to any domain you have setup in your user directory.
|
|
||||||
|
|
||||||
-->
|
|
||||||
<action application="set" data="domain_name=$${domain}"/>
|
<action application="set" data="domain_name=$${domain}"/>
|
||||||
<!-- This example maps the DID 5551212 to ring 1000 in the default context -->
|
<action application="transfer" data="${destination_number} XML default"/>
|
||||||
<action application="transfer" data="1000 XML default"/>
|
|
||||||
</condition>
|
</condition>
|
||||||
</extension>
|
</extension>
|
||||||
</include>
|
</include>
|
||||||
|
|||||||
@@ -37,6 +37,7 @@
|
|||||||
<!--<param name="disable-srv503" value="true"/>-->
|
<!--<param name="disable-srv503" value="true"/>-->
|
||||||
<!-- This could be set to "passive" -->
|
<!-- This could be set to "passive" -->
|
||||||
<param name="local-network-acl" value="localnet.auto"/>
|
<param name="local-network-acl" value="localnet.auto"/>
|
||||||
|
<param name="apply-inbound-acl" value="domains" />
|
||||||
<param name="manage-presence" value="false"/>
|
<param name="manage-presence" value="false"/>
|
||||||
|
|
||||||
<!-- used to share presence info across sofia profiles
|
<!-- used to share presence info across sofia profiles
|
||||||
|
|||||||
41
conf/sip_profiles/external/example.xml
vendored
41
conf/sip_profiles/external/example.xml
vendored
@@ -1,41 +0,0 @@
|
|||||||
<include>
|
|
||||||
<!--<gateway name="asterlink.com">-->
|
|
||||||
<!--/// account username *required* ///-->
|
|
||||||
<!--<param name="username" value="cluecon"/>-->
|
|
||||||
<!--/// auth realm: *optional* same as gateway name, if blank ///-->
|
|
||||||
<!--<param name="realm" value="asterlink.com"/>-->
|
|
||||||
<!--/// username to use in from: *optional* same as username, if blank ///-->
|
|
||||||
<!--<param name="from-user" value="cluecon"/>-->
|
|
||||||
<!--/// domain to use in from: *optional* same as realm, if blank ///-->
|
|
||||||
<!--<param name="from-domain" value="asterlink.com"/>-->
|
|
||||||
<!--/// account password *required* ///-->
|
|
||||||
<!--<param name="password" value="2007"/>-->
|
|
||||||
<!--/// extension for inbound calls: *optional* same as username, if blank ///-->
|
|
||||||
<!--<param name="extension" value="cluecon"/>-->
|
|
||||||
<!--/// proxy host: *optional* same as realm, if blank ///-->
|
|
||||||
<!--<param name="proxy" value="asterlink.com"/>-->
|
|
||||||
<!--/// send register to this proxy: *optional* same as proxy, if blank ///-->
|
|
||||||
<!--<param name="register-proxy" value="mysbc.com"/>-->
|
|
||||||
<!--/// expire in seconds: *optional* 3600, if blank ///-->
|
|
||||||
<!--<param name="expire-seconds" value="60"/>-->
|
|
||||||
<!--/// do not register ///-->
|
|
||||||
<!--<param name="register" value="false"/>-->
|
|
||||||
<!-- which transport to use for register -->
|
|
||||||
<!--<param name="register-transport" value="udp"/>-->
|
|
||||||
<!--How many seconds before a retry when a failure or timeout occurs -->
|
|
||||||
<!--<param name="retry-seconds" value="30"/>-->
|
|
||||||
<!--Use the callerid of an inbound call in the from field on outbound calls via this gateway -->
|
|
||||||
<!--<param name="caller-id-in-from" value="false"/>-->
|
|
||||||
<!--extra sip params to send in the contact-->
|
|
||||||
<!--<param name="contact-params" value=""/>-->
|
|
||||||
<!-- Put the extension in the contact -->
|
|
||||||
<!--<param name="extension-in-contact" value="true"/>-->
|
|
||||||
<!--send an options ping every x seconds, failure will unregister and/or mark it down-->
|
|
||||||
<!--<param name="ping" value="25"/>-->
|
|
||||||
<!--<param name="cid-type" value="rpid"/>-->
|
|
||||||
<!--rfc5626 : Abilitazione rfc5626 ///-->
|
|
||||||
<!--<param name="rfc-5626" value="true"/>-->
|
|
||||||
<!--rfc5626 : extra sip params to send in the contact-->
|
|
||||||
<!--<param name="reg-id" value="1"/>-->
|
|
||||||
<!--</gateway>-->
|
|
||||||
</include>
|
|
||||||
14
conf/sip_profiles/external/powernet.xml
vendored
Normal file
14
conf/sip_profiles/external/powernet.xml
vendored
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
<include>
|
||||||
|
<gateway name="powernet_1">
|
||||||
|
<param name="register" value="false"/>
|
||||||
|
<param name="proxy" value="66.234.186.77" />
|
||||||
|
<param name="caller-id-in-from" value="true"/>
|
||||||
|
<param name="ping" value="60"/>
|
||||||
|
</gateway>
|
||||||
|
<gateway name="powernet_2">
|
||||||
|
<param name="register" value="false"/>
|
||||||
|
<param name="proxy" value="66.234.186.77" />
|
||||||
|
<param name="caller-id-in-from" value="true"/>
|
||||||
|
<param name="ping" value="60"/>
|
||||||
|
</gateway>
|
||||||
|
</include>
|
||||||
@@ -291,7 +291,7 @@
|
|||||||
If unspecified, the bind_server_ip value is used.
|
If unspecified, the bind_server_ip value is used.
|
||||||
Used by: sofia.conf.xml dingaling.conf.xml
|
Used by: sofia.conf.xml dingaling.conf.xml
|
||||||
-->
|
-->
|
||||||
<X-PRE-PROCESS cmd="stun-set" data="external_rtp_ip=47.206.161.244"/>
|
<X-PRE-PROCESS cmd="stun-set" data="external_rtp_ip=47.206.161.230"/>
|
||||||
|
|
||||||
<!-- external_sip_ip
|
<!-- external_sip_ip
|
||||||
Used as the public IP address for SDP.
|
Used as the public IP address for SDP.
|
||||||
@@ -304,7 +304,7 @@
|
|||||||
If unspecified, the bind_server_ip value is used.
|
If unspecified, the bind_server_ip value is used.
|
||||||
Used by: sofia.conf.xml dingaling.conf.xml
|
Used by: sofia.conf.xml dingaling.conf.xml
|
||||||
-->
|
-->
|
||||||
<X-PRE-PROCESS cmd="stun-set" data="external_sip_ip=47.206.161.244"/>
|
<X-PRE-PROCESS cmd="stun-set" data="external_sip_ip=47.206.161.230"/>
|
||||||
|
|
||||||
<!-- unroll-loops
|
<!-- unroll-loops
|
||||||
Used to turn on sip loopback unrolling.
|
Used to turn on sip loopback unrolling.
|
||||||
@@ -412,14 +412,14 @@
|
|||||||
|
|
||||||
<!-- Internal SIP Profile -->
|
<!-- Internal SIP Profile -->
|
||||||
<X-PRE-PROCESS cmd="set" data="internal_auth_calls=true"/>
|
<X-PRE-PROCESS cmd="set" data="internal_auth_calls=true"/>
|
||||||
<X-PRE-PROCESS cmd="set" data="internal_sip_port=5060"/>
|
<X-PRE-PROCESS cmd="set" data="internal_sip_port=5080"/>
|
||||||
<X-PRE-PROCESS cmd="set" data="internal_tls_port=5061"/>
|
<X-PRE-PROCESS cmd="set" data="internal_tls_port=5081"/>
|
||||||
<X-PRE-PROCESS cmd="set" data="internal_ssl_enable=false"/>
|
<X-PRE-PROCESS cmd="set" data="internal_ssl_enable=false"/>
|
||||||
|
|
||||||
<!-- External SIP Profile -->
|
<!-- External SIP Profile -->
|
||||||
<X-PRE-PROCESS cmd="set" data="external_auth_calls=false"/>
|
<X-PRE-PROCESS cmd="set" data="external_auth_calls=false"/>
|
||||||
<X-PRE-PROCESS cmd="set" data="external_sip_port=5080"/>
|
<X-PRE-PROCESS cmd="set" data="external_sip_port=5060"/>
|
||||||
<X-PRE-PROCESS cmd="set" data="external_tls_port=5081"/>
|
<X-PRE-PROCESS cmd="set" data="external_tls_port=5061"/>
|
||||||
<X-PRE-PROCESS cmd="set" data="external_ssl_enable=false"/>
|
<X-PRE-PROCESS cmd="set" data="external_ssl_enable=false"/>
|
||||||
|
|
||||||
<!-- Video Settings -->
|
<!-- Video Settings -->
|
||||||
|
|||||||
@@ -1,2 +1,3 @@
|
|||||||
DATABASE_URL=postgres://freeswitch:T5NyU2NwQb5DD9oV@localhost/did_router
|
DATABASE_URL=postgres://freeswitch:T5NyU2NwQb5DD9oV@localhost/did_router
|
||||||
|
SOUND_PATH=/usr/src/freeswitch_chris/sounds
|
||||||
|
|
||||||
|
|||||||
@@ -127,3 +127,32 @@ pub fn list_did() ->Result<Vec<Did>, Error> {
|
|||||||
|
|
||||||
Ok(res)
|
Ok(res)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn from_pbx(ipaddr: &str) -> Result<bool, Error> {
|
||||||
|
use crate::schema::dids::dsl::*;
|
||||||
|
|
||||||
|
let pattern = format!("%{}%", ipaddr);
|
||||||
|
let mut conn = connect();
|
||||||
|
let count = dids
|
||||||
|
.filter(target.is_not_null().and(target.ilike(&pattern)))
|
||||||
|
.count()
|
||||||
|
.get_result::<i64>(&mut conn)?;
|
||||||
|
|
||||||
|
Ok(count > 0)
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use super::*;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn validate_from_pbx() {
|
||||||
|
assert_eq!(Ok(true), from_pbx("172.16.0.213"));
|
||||||
|
assert_eq!(Ok(true), from_pbx("172.16.0.215"));
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn validate_not_from_pbx() {
|
||||||
|
assert_eq!(Ok(false), from_pbx("192.168.1.1"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,34 +1,65 @@
|
|||||||
|
use dotenvy::dotenv;
|
||||||
|
use std::env;
|
||||||
use xml_builder::{XMLBuilder, XMLElement, XMLVersion};
|
use xml_builder::{XMLBuilder, XMLElement, XMLVersion};
|
||||||
use super::database as db;
|
use super::database as db;
|
||||||
use super::database::{DidTargetType, Did};
|
use super::database::{DidTargetType, Did};
|
||||||
|
|
||||||
pub fn url(_did: Did) -> XMLElement {
|
pub fn url(did: Did) -> XMLElement {
|
||||||
let work = XMLElement::new("work");
|
let mut work = XMLElement::new("work");
|
||||||
|
let mut bridge = XMLElement::new("execute");
|
||||||
|
let target = did.target.unwrap();
|
||||||
|
|
||||||
|
bridge.add_attribute("application", "bridge");
|
||||||
|
bridge.add_attribute("data", format!("sofia/external/{}", target).as_str());
|
||||||
|
|
||||||
|
work.add_child(bridge).unwrap();
|
||||||
|
|
||||||
work
|
work
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn moh(_did: Did) -> XMLElement {
|
pub fn moh(_did: Did) -> XMLElement {
|
||||||
let work = XMLElement::new("work");
|
let mut work = XMLElement::new("work");
|
||||||
|
|
||||||
|
let mut playback = XMLElement::new("playback");
|
||||||
|
playback.add_attribute("file", "local_stream://default");
|
||||||
|
work.add_child(playback).unwrap();
|
||||||
|
|
||||||
work
|
work
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn external_number(_did: Did) -> XMLElement {
|
pub fn external_number(did: Did) -> XMLElement {
|
||||||
let work = XMLElement::new("work");
|
let mut work = XMLElement::new("work");
|
||||||
|
let mut bridge = XMLElement::new("execute");
|
||||||
|
let target = did.target.unwrap();
|
||||||
|
|
||||||
|
bridge.add_attribute("application", "bridge");
|
||||||
|
bridge.add_attribute("data", format!("sofia/gateway/powernet_1/{}", target).as_str());
|
||||||
|
|
||||||
|
work.add_child(bridge).unwrap();
|
||||||
|
|
||||||
work
|
work
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn no_service(_did: Did) -> XMLElement {
|
pub fn no_service(_did: Did) -> XMLElement {
|
||||||
|
dotenv().ok();
|
||||||
|
let sound_path = env::var("SOUND_PATH").expect("SOUND_PATH must be set");
|
||||||
|
let no_service_path = format!("{}/no_service.wav", sound_path);
|
||||||
let mut work = XMLElement::new("work");
|
let mut work = XMLElement::new("work");
|
||||||
let mut playback = XMLElement::new("playback");
|
|
||||||
playback.add_attribute("name", "exten");
|
|
||||||
playback.add_attribute("file", "ivr/ivr-welcome_to_freeswitch.wav");
|
|
||||||
|
|
||||||
work.add_child(playback).unwrap();
|
add_playback_element(&mut work, &no_service_path);
|
||||||
|
|
||||||
work
|
work
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn night_mode(_did: Did) -> XMLElement {
|
pub fn night_mode(_did: Did) -> XMLElement {
|
||||||
let work = XMLElement::new("work");
|
dotenv().ok();
|
||||||
|
let sound_path = env::var("SOUND_PATH").expect("SOUND_PATH must be set");
|
||||||
|
let night_mode_path = format!("{}/night_mode.wav", sound_path);
|
||||||
|
|
||||||
|
let mut work = XMLElement::new("work");
|
||||||
|
|
||||||
|
add_playback_element(&mut work, &night_mode_path);
|
||||||
|
|
||||||
work
|
work
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -37,17 +68,33 @@ pub fn custom_message(_did: Did) -> XMLElement {
|
|||||||
work
|
work
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn route_call(did: String) -> Vec<u8> {
|
pub fn outbound(d: &str) -> XMLElement {
|
||||||
|
let mut work = XMLElement::new("work");
|
||||||
|
let mut bridge = XMLElement::new("execute");
|
||||||
|
|
||||||
|
bridge.add_attribute("application", "bridge");
|
||||||
|
bridge.add_attribute("data", format!("sofia/gateway/powernet_1/{}", d).as_str());
|
||||||
|
|
||||||
|
work.add_child(bridge).unwrap();
|
||||||
|
|
||||||
|
work
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn add_playback_element(work: &mut XMLElement ,file_path: &str) {
|
||||||
|
let mut answer = XMLElement::new("execute");
|
||||||
|
answer.add_attribute("application", "answer");
|
||||||
|
work.add_child(answer).unwrap();
|
||||||
|
|
||||||
|
let mut playback = XMLElement::new("playback");
|
||||||
|
playback.add_attribute("file", &file_path);
|
||||||
|
work.add_child(playback).unwrap();
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn build_work_element(did: &str, caller_ipaddr: &str) -> XMLElement {
|
||||||
|
if db::from_pbx(&caller_ipaddr).unwrap() == true {
|
||||||
|
outbound(did)
|
||||||
|
} else {
|
||||||
let d = db::get_did_by(&did).unwrap();
|
let d = db::get_did_by(&did).unwrap();
|
||||||
let mut xml = XMLBuilder::new()
|
|
||||||
.version(XMLVersion::XML1_1)
|
|
||||||
.encoding("UTF-8".into())
|
|
||||||
.build();
|
|
||||||
|
|
||||||
let mut doc = XMLElement::new("document");
|
|
||||||
doc.add_attribute("type", "xml/freeswitch-httapi");
|
|
||||||
|
|
||||||
let params = XMLElement::new("params");
|
|
||||||
let work = match d.target_type {
|
let work = match d.target_type {
|
||||||
DidTargetType::Url => {
|
DidTargetType::Url => {
|
||||||
url(d)
|
url(d)
|
||||||
@@ -69,8 +116,39 @@ pub fn route_call(did: String) -> Vec<u8> {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
work
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn route_call(did: String, caller_ipaddr: String) -> Vec<u8> {
|
||||||
|
let mut xml = XMLBuilder::new()
|
||||||
|
.version(XMLVersion::XML1_1)
|
||||||
|
.encoding("UTF-8".into())
|
||||||
|
.build();
|
||||||
|
|
||||||
|
let mut doc = XMLElement::new("document");
|
||||||
|
doc.add_attribute("type", "xml/freeswitch-httapi");
|
||||||
|
|
||||||
|
let params = XMLElement::new("params");
|
||||||
|
let mut work = build_work_element(&did, &caller_ipaddr);
|
||||||
|
|
||||||
|
let mut hangup = XMLElement::new("execute");
|
||||||
|
hangup.add_attribute("application", "hangup");
|
||||||
|
work.add_child(hangup).unwrap();
|
||||||
|
|
||||||
doc.add_child(params).unwrap();
|
doc.add_child(params).unwrap();
|
||||||
|
|
||||||
|
let d = db::get_did_by(&did);
|
||||||
|
match d {
|
||||||
|
Ok(d) => {
|
||||||
|
if d.active == true {
|
||||||
doc.add_child(work).unwrap();
|
doc.add_child(work).unwrap();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
Err(_) => {
|
||||||
|
doc.add_child(work).unwrap();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
xml.set_root_element(doc);
|
xml.set_root_element(doc);
|
||||||
|
|
||||||
@@ -78,5 +156,4 @@ pub fn route_call(did: String) -> Vec<u8> {
|
|||||||
xml.generate(&mut writer).unwrap();
|
xml.generate(&mut writer).unwrap();
|
||||||
|
|
||||||
writer
|
writer
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,7 +17,9 @@ use database::DidTargetType;
|
|||||||
#[derive(Debug, Deserialize)]
|
#[derive(Debug, Deserialize)]
|
||||||
struct RouteData {
|
struct RouteData {
|
||||||
#[serde(rename = "Caller-Destination-Number")]
|
#[serde(rename = "Caller-Destination-Number")]
|
||||||
dest_did: String
|
dest_did: String,
|
||||||
|
#[serde(rename = "Caller-Network-Addr")]
|
||||||
|
caller_ipaddr: String
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Deserialize)]
|
#[derive(Debug, Deserialize)]
|
||||||
@@ -28,9 +30,10 @@ struct JsonDid {
|
|||||||
active: bool
|
active: bool
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn route_did(data: web::Form<RouteData>) -> impl Responder {
|
async fn route_did(form_data: web::Form<RouteData>) -> impl Responder {
|
||||||
let did = data.dest_did.clone();
|
let did = form_data.dest_did.clone();
|
||||||
let xml = httapi::route_call(did);
|
let caller_ipaddr = form_data.caller_ipaddr.clone();
|
||||||
|
let xml = httapi::route_call(did, caller_ipaddr);
|
||||||
HttpResponse::Ok()
|
HttpResponse::Ok()
|
||||||
.content_type(ContentType::xml())
|
.content_type(ContentType::xml())
|
||||||
.body(xml)
|
.body(xml)
|
||||||
|
|||||||
921
frontend/Cargo.lock
generated
Normal file
921
frontend/Cargo.lock
generated
Normal file
@@ -0,0 +1,921 @@
|
|||||||
|
# This file is automatically @generated by Cargo.
|
||||||
|
# It is not intended for manual editing.
|
||||||
|
version = 4
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "bincode"
|
||||||
|
version = "1.3.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad"
|
||||||
|
dependencies = [
|
||||||
|
"serde",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "bumpalo"
|
||||||
|
version = "3.20.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "bytes"
|
||||||
|
version = "1.11.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "cfg-if"
|
||||||
|
version = "1.0.4"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "console_error_panic_hook"
|
||||||
|
version = "0.1.7"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc"
|
||||||
|
dependencies = [
|
||||||
|
"cfg-if",
|
||||||
|
"wasm-bindgen",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "equivalent"
|
||||||
|
version = "1.0.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "fnv"
|
||||||
|
version = "1.0.7"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "form_urlencoded"
|
||||||
|
version = "1.2.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf"
|
||||||
|
dependencies = [
|
||||||
|
"percent-encoding",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "frontend"
|
||||||
|
version = "0.1.0"
|
||||||
|
dependencies = [
|
||||||
|
"yew",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "futures"
|
||||||
|
version = "0.3.32"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d"
|
||||||
|
dependencies = [
|
||||||
|
"futures-channel",
|
||||||
|
"futures-core",
|
||||||
|
"futures-io",
|
||||||
|
"futures-sink",
|
||||||
|
"futures-task",
|
||||||
|
"futures-util",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "futures-channel"
|
||||||
|
version = "0.3.32"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d"
|
||||||
|
dependencies = [
|
||||||
|
"futures-core",
|
||||||
|
"futures-sink",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "futures-core"
|
||||||
|
version = "0.3.32"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "futures-io"
|
||||||
|
version = "0.3.32"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "futures-macro"
|
||||||
|
version = "0.3.32"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"syn 2.0.117",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "futures-sink"
|
||||||
|
version = "0.3.32"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "futures-task"
|
||||||
|
version = "0.3.32"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "futures-util"
|
||||||
|
version = "0.3.32"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6"
|
||||||
|
dependencies = [
|
||||||
|
"futures-channel",
|
||||||
|
"futures-core",
|
||||||
|
"futures-io",
|
||||||
|
"futures-macro",
|
||||||
|
"futures-sink",
|
||||||
|
"futures-task",
|
||||||
|
"memchr",
|
||||||
|
"pin-project-lite",
|
||||||
|
"slab",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "getrandom"
|
||||||
|
version = "0.2.17"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0"
|
||||||
|
dependencies = [
|
||||||
|
"cfg-if",
|
||||||
|
"js-sys",
|
||||||
|
"libc",
|
||||||
|
"wasi",
|
||||||
|
"wasm-bindgen",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "gloo"
|
||||||
|
version = "0.11.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "d15282ece24eaf4bd338d73ef580c6714c8615155c4190c781290ee3fa0fd372"
|
||||||
|
dependencies = [
|
||||||
|
"gloo-console",
|
||||||
|
"gloo-dialogs",
|
||||||
|
"gloo-events",
|
||||||
|
"gloo-file",
|
||||||
|
"gloo-history",
|
||||||
|
"gloo-net",
|
||||||
|
"gloo-render",
|
||||||
|
"gloo-storage",
|
||||||
|
"gloo-timers",
|
||||||
|
"gloo-utils",
|
||||||
|
"gloo-worker",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "gloo-console"
|
||||||
|
version = "0.3.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "2a17868f56b4a24f677b17c8cb69958385102fa879418052d60b50bc1727e261"
|
||||||
|
dependencies = [
|
||||||
|
"gloo-utils",
|
||||||
|
"js-sys",
|
||||||
|
"serde",
|
||||||
|
"wasm-bindgen",
|
||||||
|
"web-sys",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "gloo-dialogs"
|
||||||
|
version = "0.2.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "bf4748e10122b01435750ff530095b1217cf6546173459448b83913ebe7815df"
|
||||||
|
dependencies = [
|
||||||
|
"wasm-bindgen",
|
||||||
|
"web-sys",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "gloo-events"
|
||||||
|
version = "0.2.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "27c26fb45f7c385ba980f5fa87ac677e363949e065a083722697ef1b2cc91e41"
|
||||||
|
dependencies = [
|
||||||
|
"wasm-bindgen",
|
||||||
|
"web-sys",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "gloo-file"
|
||||||
|
version = "0.3.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "97563d71863fb2824b2e974e754a81d19c4a7ec47b09ced8a0e6656b6d54bd1f"
|
||||||
|
dependencies = [
|
||||||
|
"gloo-events",
|
||||||
|
"js-sys",
|
||||||
|
"wasm-bindgen",
|
||||||
|
"web-sys",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "gloo-history"
|
||||||
|
version = "0.2.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "903f432be5ba34427eac5e16048ef65604a82061fe93789f2212afc73d8617d6"
|
||||||
|
dependencies = [
|
||||||
|
"getrandom",
|
||||||
|
"gloo-events",
|
||||||
|
"gloo-utils",
|
||||||
|
"serde",
|
||||||
|
"serde-wasm-bindgen",
|
||||||
|
"serde_urlencoded",
|
||||||
|
"thiserror 1.0.69",
|
||||||
|
"wasm-bindgen",
|
||||||
|
"web-sys",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "gloo-net"
|
||||||
|
version = "0.5.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "43aaa242d1239a8822c15c645f02166398da4f8b5c4bae795c1f5b44e9eee173"
|
||||||
|
dependencies = [
|
||||||
|
"futures-channel",
|
||||||
|
"futures-core",
|
||||||
|
"futures-sink",
|
||||||
|
"gloo-utils",
|
||||||
|
"http",
|
||||||
|
"js-sys",
|
||||||
|
"pin-project",
|
||||||
|
"serde",
|
||||||
|
"serde_json",
|
||||||
|
"thiserror 1.0.69",
|
||||||
|
"wasm-bindgen",
|
||||||
|
"wasm-bindgen-futures",
|
||||||
|
"web-sys",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "gloo-render"
|
||||||
|
version = "0.2.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "56008b6744713a8e8d98ac3dcb7d06543d5662358c9c805b4ce2167ad4649833"
|
||||||
|
dependencies = [
|
||||||
|
"wasm-bindgen",
|
||||||
|
"web-sys",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "gloo-storage"
|
||||||
|
version = "0.3.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "fbc8031e8c92758af912f9bc08fbbadd3c6f3cfcbf6b64cdf3d6a81f0139277a"
|
||||||
|
dependencies = [
|
||||||
|
"gloo-utils",
|
||||||
|
"js-sys",
|
||||||
|
"serde",
|
||||||
|
"serde_json",
|
||||||
|
"thiserror 1.0.69",
|
||||||
|
"wasm-bindgen",
|
||||||
|
"web-sys",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "gloo-timers"
|
||||||
|
version = "0.3.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "bbb143cf96099802033e0d4f4963b19fd2e0b728bcf076cd9cf7f6634f092994"
|
||||||
|
dependencies = [
|
||||||
|
"js-sys",
|
||||||
|
"wasm-bindgen",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "gloo-utils"
|
||||||
|
version = "0.2.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "0b5555354113b18c547c1d3a98fbf7fb32a9ff4f6fa112ce823a21641a0ba3aa"
|
||||||
|
dependencies = [
|
||||||
|
"js-sys",
|
||||||
|
"serde",
|
||||||
|
"serde_json",
|
||||||
|
"wasm-bindgen",
|
||||||
|
"web-sys",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "gloo-worker"
|
||||||
|
version = "0.5.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "085f262d7604911c8150162529cefab3782e91adb20202e8658f7275d2aefe5d"
|
||||||
|
dependencies = [
|
||||||
|
"bincode",
|
||||||
|
"futures",
|
||||||
|
"gloo-utils",
|
||||||
|
"gloo-worker-macros",
|
||||||
|
"js-sys",
|
||||||
|
"pinned",
|
||||||
|
"serde",
|
||||||
|
"thiserror 1.0.69",
|
||||||
|
"wasm-bindgen",
|
||||||
|
"wasm-bindgen-futures",
|
||||||
|
"web-sys",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "gloo-worker-macros"
|
||||||
|
version = "0.1.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "956caa58d4857bc9941749d55e4bd3000032d8212762586fa5705632967140e7"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro-crate",
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"syn 2.0.117",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "hashbrown"
|
||||||
|
version = "0.16.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "hermit-abi"
|
||||||
|
version = "0.5.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "http"
|
||||||
|
version = "0.2.12"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1"
|
||||||
|
dependencies = [
|
||||||
|
"bytes",
|
||||||
|
"fnv",
|
||||||
|
"itoa",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "implicit-clone"
|
||||||
|
version = "0.6.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "1689b939ee35e3a075b0834b5672efd43aec8a6e81a1c6002b76a5ca2f211ae0"
|
||||||
|
dependencies = [
|
||||||
|
"implicit-clone-derive",
|
||||||
|
"indexmap",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "implicit-clone-derive"
|
||||||
|
version = "0.1.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "699c1b6d335e63d0ba5c1e1c7f647371ce989c3bcbe1f7ed2b85fa56e3bd1a21"
|
||||||
|
dependencies = [
|
||||||
|
"quote",
|
||||||
|
"syn 2.0.117",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "indexmap"
|
||||||
|
version = "2.13.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "7714e70437a7dc3ac8eb7e6f8df75fd8eb422675fc7678aff7364301092b1017"
|
||||||
|
dependencies = [
|
||||||
|
"equivalent",
|
||||||
|
"hashbrown",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "itoa"
|
||||||
|
version = "1.0.18"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "js-sys"
|
||||||
|
version = "0.3.93"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "797146bb2677299a1eb6b7b50a890f4c361b29ef967addf5b2fa45dae1bb6d7d"
|
||||||
|
dependencies = [
|
||||||
|
"cfg-if",
|
||||||
|
"futures-util",
|
||||||
|
"once_cell",
|
||||||
|
"wasm-bindgen",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "libc"
|
||||||
|
version = "0.2.183"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "b5b646652bf6661599e1da8901b3b9522896f01e736bad5f723fe7a3a27f899d"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "memchr"
|
||||||
|
version = "2.8.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "num_cpus"
|
||||||
|
version = "1.17.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b"
|
||||||
|
dependencies = [
|
||||||
|
"hermit-abi",
|
||||||
|
"libc",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "once_cell"
|
||||||
|
version = "1.21.4"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "percent-encoding"
|
||||||
|
version = "2.3.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "pin-project"
|
||||||
|
version = "1.1.11"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "f1749c7ed4bcaf4c3d0a3efc28538844fb29bcdd7d2b67b2be7e20ba861ff517"
|
||||||
|
dependencies = [
|
||||||
|
"pin-project-internal",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "pin-project-internal"
|
||||||
|
version = "1.1.11"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "d9b20ed30f105399776b9c883e68e536ef602a16ae6f596d2c473591d6ad64c6"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"syn 2.0.117",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "pin-project-lite"
|
||||||
|
version = "0.2.17"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "pinned"
|
||||||
|
version = "0.1.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "a829027bd95e54cfe13e3e258a1ae7b645960553fb82b75ff852c29688ee595b"
|
||||||
|
dependencies = [
|
||||||
|
"futures",
|
||||||
|
"rustversion",
|
||||||
|
"thiserror 1.0.69",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "prettyplease"
|
||||||
|
version = "0.2.37"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
"syn 2.0.117",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "proc-macro-crate"
|
||||||
|
version = "1.3.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919"
|
||||||
|
dependencies = [
|
||||||
|
"once_cell",
|
||||||
|
"toml_edit",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "proc-macro-error"
|
||||||
|
version = "1.0.4"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro-error-attr",
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"syn 1.0.109",
|
||||||
|
"version_check",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "proc-macro-error-attr"
|
||||||
|
version = "1.0.4"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"version_check",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "proc-macro2"
|
||||||
|
version = "1.0.106"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934"
|
||||||
|
dependencies = [
|
||||||
|
"unicode-ident",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "quote"
|
||||||
|
version = "1.0.45"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "rustversion"
|
||||||
|
version = "1.0.22"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "ryu"
|
||||||
|
version = "1.0.23"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "serde"
|
||||||
|
version = "1.0.228"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e"
|
||||||
|
dependencies = [
|
||||||
|
"serde_core",
|
||||||
|
"serde_derive",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "serde-wasm-bindgen"
|
||||||
|
version = "0.6.5"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "8302e169f0eddcc139c70f139d19d6467353af16f9fce27e8c30158036a1e16b"
|
||||||
|
dependencies = [
|
||||||
|
"js-sys",
|
||||||
|
"serde",
|
||||||
|
"wasm-bindgen",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "serde_core"
|
||||||
|
version = "1.0.228"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad"
|
||||||
|
dependencies = [
|
||||||
|
"serde_derive",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "serde_derive"
|
||||||
|
version = "1.0.228"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"syn 2.0.117",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "serde_json"
|
||||||
|
version = "1.0.149"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86"
|
||||||
|
dependencies = [
|
||||||
|
"itoa",
|
||||||
|
"memchr",
|
||||||
|
"serde",
|
||||||
|
"serde_core",
|
||||||
|
"zmij",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "serde_urlencoded"
|
||||||
|
version = "0.7.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
|
||||||
|
dependencies = [
|
||||||
|
"form_urlencoded",
|
||||||
|
"itoa",
|
||||||
|
"ryu",
|
||||||
|
"serde",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "slab"
|
||||||
|
version = "0.4.12"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "syn"
|
||||||
|
version = "1.0.109"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
"unicode-ident",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "syn"
|
||||||
|
version = "2.0.117"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"unicode-ident",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "thiserror"
|
||||||
|
version = "1.0.69"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52"
|
||||||
|
dependencies = [
|
||||||
|
"thiserror-impl 1.0.69",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "thiserror"
|
||||||
|
version = "2.0.18"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4"
|
||||||
|
dependencies = [
|
||||||
|
"thiserror-impl 2.0.18",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "thiserror-impl"
|
||||||
|
version = "1.0.69"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"syn 2.0.117",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "thiserror-impl"
|
||||||
|
version = "2.0.18"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"syn 2.0.117",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "tokio"
|
||||||
|
version = "1.50.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "27ad5e34374e03cfffefc301becb44e9dc3c17584f414349ebe29ed26661822d"
|
||||||
|
dependencies = [
|
||||||
|
"pin-project-lite",
|
||||||
|
"tokio-macros",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "tokio-macros"
|
||||||
|
version = "2.6.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "5c55a2eff8b69ce66c84f85e1da1c233edc36ceb85a2058d11b0d6a3c7e7569c"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"syn 2.0.117",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "tokio-stream"
|
||||||
|
version = "0.1.18"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "32da49809aab5c3bc678af03902d4ccddea2a87d028d86392a4b1560c6906c70"
|
||||||
|
dependencies = [
|
||||||
|
"futures-core",
|
||||||
|
"pin-project-lite",
|
||||||
|
"tokio",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "tokise"
|
||||||
|
version = "0.2.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "ba44a1b36f42a95bd21b5e4acc1468547f75a73e7cf619312408d1f74c7fb687"
|
||||||
|
dependencies = [
|
||||||
|
"futures",
|
||||||
|
"gloo",
|
||||||
|
"num_cpus",
|
||||||
|
"once_cell",
|
||||||
|
"pin-project",
|
||||||
|
"pinned",
|
||||||
|
"tokio",
|
||||||
|
"tokio-stream",
|
||||||
|
"wasm-bindgen-futures",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "toml_datetime"
|
||||||
|
version = "0.6.11"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "toml_edit"
|
||||||
|
version = "0.19.15"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421"
|
||||||
|
dependencies = [
|
||||||
|
"indexmap",
|
||||||
|
"toml_datetime",
|
||||||
|
"winnow",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "tracing"
|
||||||
|
version = "0.1.44"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100"
|
||||||
|
dependencies = [
|
||||||
|
"pin-project-lite",
|
||||||
|
"tracing-attributes",
|
||||||
|
"tracing-core",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "tracing-attributes"
|
||||||
|
version = "0.1.31"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"syn 2.0.117",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "tracing-core"
|
||||||
|
version = "0.1.36"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a"
|
||||||
|
dependencies = [
|
||||||
|
"once_cell",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "unicode-ident"
|
||||||
|
version = "1.0.24"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "version_check"
|
||||||
|
version = "0.9.5"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "wasi"
|
||||||
|
version = "0.11.1+wasi-snapshot-preview1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "wasm-bindgen"
|
||||||
|
version = "0.2.116"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "7dc0882f7b5bb01ae8c5215a1230832694481c1a4be062fd410e12ea3da5b631"
|
||||||
|
dependencies = [
|
||||||
|
"cfg-if",
|
||||||
|
"once_cell",
|
||||||
|
"rustversion",
|
||||||
|
"wasm-bindgen-macro",
|
||||||
|
"wasm-bindgen-shared",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "wasm-bindgen-futures"
|
||||||
|
version = "0.4.66"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "19280959e2844181895ef62f065c63e0ca07ece4771b53d89bfdb967d97cbf05"
|
||||||
|
dependencies = [
|
||||||
|
"js-sys",
|
||||||
|
"wasm-bindgen",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "wasm-bindgen-macro"
|
||||||
|
version = "0.2.116"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "75973d3066e01d035dbedaad2864c398df42f8dd7b1ea057c35b8407c015b537"
|
||||||
|
dependencies = [
|
||||||
|
"quote",
|
||||||
|
"wasm-bindgen-macro-support",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "wasm-bindgen-macro-support"
|
||||||
|
version = "0.2.116"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "91af5e4be765819e0bcfee7322c14374dc821e35e72fa663a830bbc7dc199eac"
|
||||||
|
dependencies = [
|
||||||
|
"bumpalo",
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"syn 2.0.117",
|
||||||
|
"wasm-bindgen-shared",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "wasm-bindgen-shared"
|
||||||
|
version = "0.2.116"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "c9bf0406a78f02f336bf1e451799cca198e8acde4ffa278f0fb20487b150a633"
|
||||||
|
dependencies = [
|
||||||
|
"unicode-ident",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "web-sys"
|
||||||
|
version = "0.3.93"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "749466a37ee189057f54748b200186b59a03417a117267baf3fd89cecc9fb837"
|
||||||
|
dependencies = [
|
||||||
|
"js-sys",
|
||||||
|
"wasm-bindgen",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "winnow"
|
||||||
|
version = "0.5.40"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876"
|
||||||
|
dependencies = [
|
||||||
|
"memchr",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "yew"
|
||||||
|
version = "0.23.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "2c154fadfa97eabdd3f3b79345ceeb9c05ee8f13f76d3d881d17fba618bf558d"
|
||||||
|
dependencies = [
|
||||||
|
"console_error_panic_hook",
|
||||||
|
"futures",
|
||||||
|
"gloo",
|
||||||
|
"implicit-clone",
|
||||||
|
"indexmap",
|
||||||
|
"js-sys",
|
||||||
|
"rustversion",
|
||||||
|
"serde",
|
||||||
|
"slab",
|
||||||
|
"thiserror 2.0.18",
|
||||||
|
"tokio",
|
||||||
|
"tokise",
|
||||||
|
"tracing",
|
||||||
|
"wasm-bindgen",
|
||||||
|
"wasm-bindgen-futures",
|
||||||
|
"web-sys",
|
||||||
|
"yew-macro",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "yew-macro"
|
||||||
|
version = "0.23.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "c08b883d84a035f57519d057f65a2a07ae25f1884ad485e1a9a523c9d880c1ad"
|
||||||
|
dependencies = [
|
||||||
|
"prettyplease",
|
||||||
|
"proc-macro-error",
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"rustversion",
|
||||||
|
"syn 2.0.117",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "zmij"
|
||||||
|
version = "1.0.21"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa"
|
||||||
7
frontend/Cargo.toml
Normal file
7
frontend/Cargo.toml
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
[package]
|
||||||
|
name = "frontend"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2024"
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
yew = { version = "0.23", features = ["csr"] }
|
||||||
8
frontend/Trunk.toml
Normal file
8
frontend/Trunk.toml
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
[serve]
|
||||||
|
address = "172.16.0.155"
|
||||||
|
port = 8080
|
||||||
|
|
||||||
|
[[hooks]]
|
||||||
|
stage = "pre_build"
|
||||||
|
command = "./tailwindcss"
|
||||||
|
command_arguments = ["-i", "input.css", "-o", "./dist/.stage/app.css"]
|
||||||
93
frontend/daisyui-theme.mjs
Normal file
93
frontend/daisyui-theme.mjs
Normal file
File diff suppressed because one or more lines are too long
1026
frontend/daisyui.mjs
Normal file
1026
frontend/daisyui.mjs
Normal file
File diff suppressed because one or more lines are too long
9
frontend/index.html
Normal file
9
frontend/index.html
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8" />
|
||||||
|
<title>Yew App</title>
|
||||||
|
<link rel="stylesheet" href="app.css" />
|
||||||
|
</head>
|
||||||
|
<body></body>
|
||||||
|
</html>
|
||||||
10
frontend/input.css
Normal file
10
frontend/input.css
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
|
||||||
|
@import "tailwindcss";
|
||||||
|
|
||||||
|
@source not "./tailwindcss";
|
||||||
|
@source not "./daisyui{,*}.mjs";
|
||||||
|
|
||||||
|
@plugin "./daisyui.mjs";
|
||||||
|
|
||||||
|
@plugin "./daisyui-theme.mjs"{
|
||||||
|
}
|
||||||
23
frontend/src/main.rs
Normal file
23
frontend/src/main.rs
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
use yew::prelude::*;
|
||||||
|
|
||||||
|
#[component]
|
||||||
|
fn App() -> Html {
|
||||||
|
html! {
|
||||||
|
<div class="navbar bg-base-100 shadow-sm">
|
||||||
|
<div class="navbar-start">
|
||||||
|
</div>
|
||||||
|
<div class="navbar-center lg:flex">
|
||||||
|
<ul class="menu menu-horizontal px-1">
|
||||||
|
<li><a>{"DID"}</a></li>
|
||||||
|
<li><a>{"CDR"}</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div class="navbar-end">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
yew::Renderer::<App>::new().render();
|
||||||
|
}
|
||||||
10
frontend/tailwind.config.js
Normal file
10
frontend/tailwind.config.js
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
module.exports = {
|
||||||
|
content: [
|
||||||
|
"index.html",
|
||||||
|
"./src/*.rs"
|
||||||
|
],
|
||||||
|
theme: {
|
||||||
|
extend: {},
|
||||||
|
},
|
||||||
|
plugins: [],
|
||||||
|
}
|
||||||
BIN
frontend/tailwindcss
Executable file
BIN
frontend/tailwindcss
Executable file
Binary file not shown.
BIN
sounds/night_mode.wav
Normal file
BIN
sounds/night_mode.wav
Normal file
Binary file not shown.
BIN
sounds/no_service.wav
Normal file
BIN
sounds/no_service.wav
Normal file
Binary file not shown.
Reference in New Issue
Block a user