deploy 2.0.0-dev-48

This commit is contained in:
mbecker20
2025-10-09 19:36:47 -07:00
parent 4d1ac32ad3
commit 72ca6d9910
10 changed files with 214 additions and 67 deletions

40
Cargo.lock generated
View File

@@ -939,7 +939,7 @@ dependencies = [
[[package]]
name = "cache"
version = "2.0.0-dev-47"
version = "2.0.0-dev-48"
dependencies = [
"anyhow",
"tokio",
@@ -1131,7 +1131,7 @@ dependencies = [
[[package]]
name = "command"
version = "2.0.0-dev-47"
version = "2.0.0-dev-48"
dependencies = [
"komodo_client",
"run_command",
@@ -1157,7 +1157,7 @@ checksum = "e47641d3deaf41fb1538ac1f54735925e275eaf3bf4d55c81b137fba797e5cbb"
[[package]]
name = "config"
version = "2.0.0-dev-47"
version = "2.0.0-dev-48"
dependencies = [
"colored",
"indexmap 2.11.4",
@@ -1442,7 +1442,7 @@ checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476"
[[package]]
name = "database"
version = "2.0.0-dev-47"
version = "2.0.0-dev-48"
dependencies = [
"anyhow",
"async-compression",
@@ -1720,7 +1720,7 @@ dependencies = [
[[package]]
name = "encoding"
version = "2.0.0-dev-47"
version = "2.0.0-dev-48"
dependencies = [
"anyhow",
"bytes",
@@ -1762,7 +1762,7 @@ dependencies = [
[[package]]
name = "environment"
version = "2.0.0-dev-47"
version = "2.0.0-dev-48"
dependencies = [
"anyhow",
"formatting",
@@ -1772,7 +1772,7 @@ dependencies = [
[[package]]
name = "environment_file"
version = "2.0.0-dev-47"
version = "2.0.0-dev-48"
dependencies = [
"thiserror 2.0.17",
]
@@ -1868,7 +1868,7 @@ dependencies = [
[[package]]
name = "formatting"
version = "2.0.0-dev-47"
version = "2.0.0-dev-48"
dependencies = [
"serror",
]
@@ -2040,7 +2040,7 @@ checksum = "e629b9b98ef3dd8afe6ca2bd0f89306cec16d43d907889945bc5d6687f2f13c7"
[[package]]
name = "git"
version = "2.0.0-dev-47"
version = "2.0.0-dev-48"
dependencies = [
"anyhow",
"cache",
@@ -2640,7 +2640,7 @@ dependencies = [
[[package]]
name = "interpolate"
version = "2.0.0-dev-47"
version = "2.0.0-dev-48"
dependencies = [
"anyhow",
"komodo_client",
@@ -2771,7 +2771,7 @@ dependencies = [
[[package]]
name = "komodo_cli"
version = "2.0.0-dev-47"
version = "2.0.0-dev-48"
dependencies = [
"anyhow",
"chrono",
@@ -2797,7 +2797,7 @@ dependencies = [
[[package]]
name = "komodo_client"
version = "2.0.0-dev-47"
version = "2.0.0-dev-48"
dependencies = [
"anyhow",
"async_timing_util",
@@ -2833,7 +2833,7 @@ dependencies = [
[[package]]
name = "komodo_core"
version = "2.0.0-dev-47"
version = "2.0.0-dev-48"
dependencies = [
"anyhow",
"arc-swap",
@@ -2908,7 +2908,7 @@ dependencies = [
[[package]]
name = "komodo_periphery"
version = "2.0.0-dev-47"
version = "2.0.0-dev-48"
dependencies = [
"anyhow",
"arc-swap",
@@ -3031,7 +3031,7 @@ dependencies = [
[[package]]
name = "logger"
version = "2.0.0-dev-47"
version = "2.0.0-dev-48"
dependencies = [
"anyhow",
"komodo_client",
@@ -3303,7 +3303,7 @@ dependencies = [
[[package]]
name = "noise"
version = "2.0.0-dev-47"
version = "2.0.0-dev-48"
dependencies = [
"anyhow",
"arc-swap",
@@ -3811,7 +3811,7 @@ checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220"
[[package]]
name = "periphery_client"
version = "2.0.0-dev-47"
version = "2.0.0-dev-48"
dependencies = [
"anyhow",
"derive_variants",
@@ -4361,7 +4361,7 @@ dependencies = [
[[package]]
name = "response"
version = "2.0.0-dev-47"
version = "2.0.0-dev-48"
dependencies = [
"anyhow",
"axum",
@@ -4683,7 +4683,7 @@ dependencies = [
[[package]]
name = "secret_file"
version = "2.0.0-dev-47"
version = "2.0.0-dev-48"
dependencies = [
"tokio",
]
@@ -5696,7 +5696,7 @@ dependencies = [
[[package]]
name = "transport"
version = "2.0.0-dev-47"
version = "2.0.0-dev-48"
dependencies = [
"anyhow",
"axum",

View File

@@ -8,7 +8,7 @@ members = [
]
[workspace.package]
version = "2.0.0-dev-47"
version = "2.0.0-dev-48"
edition = "2024"
authors = ["mbecker20 <becker.maxh@gmail.com>"]
license = "GPL-3.0-or-later"

View File

@@ -415,7 +415,7 @@ impl PeripheryConnection {
}
};
match message {
TransportMessage::Response(data) => match data.0.decode() {
TransportMessage::Response(data) => match data.decode() {
Ok(WithChannel {
channel: channel_id,
data,
@@ -437,7 +437,7 @@ impl PeripheryConnection {
warn!("Failed to read Response message | {e:#}");
}
},
TransportMessage::Terminal(data) => match data.0.decode() {
TransportMessage::Terminal(data) => match data.decode() {
Ok(WithChannel {
channel: channel_id,
data,

View File

@@ -7,12 +7,11 @@ use anyhow::anyhow;
use arc_swap::ArcSwap;
use cache::CloneCache;
use encoding::{
CastBytes as _, Decode as _, Encode as _, EncodedChannel,
EncodedJsonMessage,
CastBytes as _, Decode as _, Encode as _, WithChannel,
};
use noise::key::SpkiPublicKey;
use periphery_client::transport::{
EncodedTransportMessage, TransportMessage,
EncodedRequestMessage, EncodedTransportMessage, TransportMessage,
};
use resolver_api::Resolve;
use transport::{
@@ -182,10 +181,10 @@ async fn handle_socket<W: Websocket>(
};
match message {
TransportMessage::Request(message) => {
handle_request(args.clone(), sender.clone(), message.0)
handle_request(args.clone(), sender.clone(), message)
}
TransportMessage::Terminal(message) => {
crate::terminal::handle_message(message.0).await
crate::terminal::handle_message(message).await
}
// Rest shouldn't be received by Periphery
_ => {}
@@ -202,13 +201,13 @@ async fn handle_socket<W: Websocket>(
fn handle_request(
args: Arc<Args>,
sender: Sender<EncodedTransportMessage>,
message: EncodedChannel<EncodedJsonMessage>,
message: EncodedRequestMessage,
) {
tokio::spawn(async move {
let (channel, request): (_, PeripheryRequest) = match message
.decode()
.and_then(|res| Ok((res.channel, res.data.decode()?)))
{
let WithChannel {
channel,
data: request,
}: WithChannel<PeripheryRequest> = match message.decode() {
Ok(res) => res,
Err(e) => {
// TODO: handle:

View File

@@ -7,10 +7,11 @@ use std::{
use anyhow::{Context, anyhow};
use bytes::Bytes;
use cache::CloneCache;
use encoding::{Decode as _, EncodedChannel, WithChannel};
use encoding::{Decode as _, WithChannel};
use komodo_client::{
api::write::TerminalRecreateMode, entities::server::TerminalInfo,
};
use periphery_client::transport::EncodedTerminalMessage;
use portable_pty::{CommandBuilder, PtySize, native_pty_system};
use tokio::sync::{Mutex, broadcast, mpsc, oneshot};
use tokio_util::sync::CancellationToken;
@@ -96,7 +97,7 @@ impl TerminalTriggers {
}
}
pub async fn handle_message(message: EncodedChannel<Vec<u8>>) {
pub async fn handle_message(message: EncodedTerminalMessage) {
let WithChannel {
channel: channel_id,
mut data,

View File

@@ -15,9 +15,38 @@ impl Encode<EncodedTransportMessage> for LoginMessage {
#[derive(Debug)]
pub struct EncodedLoginMessage(
pub EncodedResult<InnerEncodedLoginMessage>,
EncodedResult<InnerEncodedLoginMessage>,
);
impl CastBytes for EncodedLoginMessage {
fn from_vec(bytes: Vec<u8>) -> Self {
Self(EncodedResult::from_vec(bytes))
}
fn into_vec(self) -> Vec<u8> {
self.0.into_vec()
}
}
impl Encode<EncodedLoginMessage> for anyhow::Result<LoginMessage> {
fn encode(self) -> EncodedLoginMessage {
EncodedLoginMessage(self.map(LoginMessage::encode).encode())
}
}
impl Encode<EncodedLoginMessage>
for EncodedResult<InnerEncodedLoginMessage>
{
fn encode(self) -> EncodedLoginMessage {
EncodedLoginMessage(self)
}
}
impl Decode<LoginMessage> for EncodedLoginMessage {
fn decode(self) -> anyhow::Result<LoginMessage> {
self.0.decode_into()
}
}
/// ```markdown
/// | -- u8[] -- | --------- u8 ------------ |
/// | <CONTENTS> | LoginMessageVariant |

View File

@@ -7,6 +7,7 @@ use encoding::{
mod login;
pub use login::*;
use serde::de::DeserializeOwned;
#[derive(Debug, Clone)]
pub struct EncodedTransportMessage(Vec<u8>);
@@ -20,18 +21,140 @@ impl CastBytes for EncodedTransportMessage {
}
}
// =================
// REQUEST MESSAGE
// =================
#[derive(Debug)]
pub struct EncodedRequestMessage(
pub EncodedChannel<EncodedJsonMessage>,
);
pub struct EncodedRequestMessage(EncodedChannel<EncodedJsonMessage>);
impl CastBytes for EncodedRequestMessage {
fn from_vec(bytes: Vec<u8>) -> Self {
Self(EncodedChannel::from_vec(bytes))
}
fn into_vec(self) -> Vec<u8> {
self.0.into_vec()
}
}
impl Encode<EncodedRequestMessage>
for WithChannel<EncodedJsonMessage>
{
fn encode(self) -> EncodedRequestMessage {
EncodedRequestMessage(self.encode())
}
}
impl<T: DeserializeOwned> Decode<WithChannel<T>>
for EncodedRequestMessage
{
fn decode(self) -> anyhow::Result<WithChannel<T>> {
let WithChannel { channel, data } = self.0.decode()?;
let data = data.decode()?;
Ok(WithChannel { channel, data })
}
}
// ==================
// RESPONSE MESSAGE
// ==================
#[derive(Debug)]
pub struct EncodedResponseMessage(
pub EncodedChannel<EncodedOption<EncodedResult<EncodedJsonMessage>>>,
EncodedChannel<EncodedOption<EncodedResult<EncodedJsonMessage>>>,
);
impl CastBytes for EncodedResponseMessage {
fn from_vec(bytes: Vec<u8>) -> Self {
Self(EncodedChannel::from_vec(bytes))
}
fn into_vec(self) -> Vec<u8> {
self.0.into_vec()
}
}
impl Encode<EncodedResponseMessage>
for WithChannel<Option<anyhow::Result<EncodedJsonMessage>>>
{
fn encode(self) -> EncodedResponseMessage {
let data = self
.map(|data| data.map(|data| data.encode()).encode())
.encode();
EncodedResponseMessage(data)
}
}
impl Encode<EncodedResponseMessage>
for WithChannel<EncodedResult<EncodedJsonMessage>>
{
fn encode(self) -> EncodedResponseMessage {
let data = self.map(|data| Some(data).encode()).encode();
EncodedResponseMessage(data)
}
}
impl<T: DeserializeOwned>
Decode<WithChannel<Option<anyhow::Result<T>>>>
for EncodedResponseMessage
{
fn decode(
self,
) -> anyhow::Result<WithChannel<Option<anyhow::Result<T>>>> {
let WithChannel { channel, data } = self.0.decode()?;
let data = data
.decode()?
.map(|data| data.decode().and_then(|data| data.decode()));
Ok(WithChannel { channel, data })
}
}
impl
Decode<
WithChannel<EncodedOption<EncodedResult<EncodedJsonMessage>>>,
> for EncodedResponseMessage
{
fn decode(
self,
) -> anyhow::Result<
WithChannel<EncodedOption<EncodedResult<EncodedJsonMessage>>>,
> {
self.0.decode()
}
}
// ==================
// TERMINAL MESSAGE
// ==================
#[derive(Debug)]
pub struct EncodedTerminalMessage(pub EncodedChannel<Vec<u8>>);
pub struct EncodedTerminalMessage(EncodedChannel<Vec<u8>>);
impl CastBytes for EncodedTerminalMessage {
fn from_vec(bytes: Vec<u8>) -> Self {
Self(EncodedChannel::from_vec(bytes))
}
fn into_vec(self) -> Vec<u8> {
self.0.into_vec()
}
}
impl Encode<EncodedTerminalMessage> for WithChannel<Vec<u8>> {
fn encode(self) -> EncodedTerminalMessage {
EncodedTerminalMessage(self.encode())
}
}
impl Decode<WithChannel<Vec<u8>>> for EncodedTerminalMessage {
fn decode(self) -> anyhow::Result<WithChannel<Vec<u8>>> {
let WithChannel { channel, data } = self.0.decode()?;
let data = data.decode()?;
Ok(WithChannel { channel, data })
}
}
// ===================
// TRANSPORT MESSAGE
// ===================
#[derive(Debug, EnumVariants)]
#[variant_derive(Debug, Clone, Copy)]
@@ -46,7 +169,7 @@ impl Encode<EncodedTransportMessage> for TransportMessage {
fn encode(self) -> EncodedTransportMessage {
let variant_byte = self.extract_variant().as_byte();
let mut bytes = match self {
TransportMessage::Login(data) => data.0.into_vec(),
TransportMessage::Login(data) => data.into_vec(),
TransportMessage::Request(data) => data.0.into_vec(),
TransportMessage::Response(data) => data.0.into_vec(),
TransportMessage::Terminal(data) => data.0.into_vec(),
@@ -67,9 +190,9 @@ impl<T: From<TransportMessage>> Decode<T>
use TransportMessageVariant::*;
let message =
match TransportMessageVariant::from_byte(variant_byte)? {
Login => TransportMessage::Login(EncodedLoginMessage(
EncodedResult::from_vec(bytes),
)),
Login => TransportMessage::Login(
EncodedLoginMessage::from_vec(bytes),
),
Request => TransportMessage::Request(EncodedRequestMessage(
EncodedChannel::from_vec(bytes),
)),
@@ -84,6 +207,10 @@ impl<T: From<TransportMessage>> Decode<T>
}
}
// ===================
// DECODED TRANSPORT
// ===================
pub enum DecodedTransportMessage {
Login(anyhow::Result<LoginMessage>),
Request(WithChannel<EncodedJsonMessage>),
@@ -97,9 +224,7 @@ impl Encode<TransportMessage> for DecodedTransportMessage {
fn encode(self) -> TransportMessage {
use DecodedTransportMessage::*;
match self {
Login(res) => TransportMessage::Login(EncodedLoginMessage(
res.map(LoginMessage::encode).encode(),
)),
Login(res) => TransportMessage::Login(res.encode()),
Request(data) => TransportMessage::Request(
EncodedRequestMessage(data.encode()),
),
@@ -130,9 +255,7 @@ impl<T: From<DecodedTransportMessage>> Decode<T>
fn decode(self) -> anyhow::Result<T> {
let message = match self {
TransportMessage::Login(encoded_result) => {
let res =
encoded_result.0.decode().and_then(|msg| msg.decode());
DecodedTransportMessage::Login(res)
DecodedTransportMessage::Login(encoded_result.decode())
}
TransportMessage::Request(encoded_channel) => {
DecodedTransportMessage::Request(encoded_channel.0.decode()?)

View File

@@ -4,8 +4,7 @@ use encoding::{
};
use futures_util::FutureExt;
use periphery_client::transport::{
DecodedTransportMessage, EncodedResponseMessage,
EncodedTransportMessage, TransportMessage,
DecodedTransportMessage, EncodedTransportMessage, TransportMessage,
};
use serde::Serialize;
use tokio::sync::{Mutex, MutexGuard, mpsc};
@@ -109,13 +108,13 @@ impl Sender<EncodedTransportMessage> {
channel: Uuid,
response: EncodedResult<EncodedJsonMessage>,
) -> anyhow::Result<()> {
let message = TransportMessage::Response(EncodedResponseMessage(
let message = TransportMessage::Response(
WithChannel {
channel,
data: Some(response).encode(),
data: response,
}
.encode(),
));
);
self.send_message(message).await
}

View File

@@ -1,9 +1,7 @@
use anyhow::anyhow;
use encoding::{Decode as _, Encode as _};
use noise::key::SpkiPublicKey;
use periphery_client::transport::{
EncodedLoginMessage, LoginMessage, TransportMessage,
};
use periphery_client::transport::{LoginMessage, TransportMessage};
use crate::{
auth::AUTH_TIMEOUT,
@@ -15,8 +13,7 @@ pub trait LoginWebsocketExt: WebsocketExt {
&mut self,
e: &anyhow::Error,
) -> impl Future<Output = anyhow::Result<()>> + Send {
let message =
TransportMessage::Login(EncodedLoginMessage(e.encode()));
let message = TransportMessage::Login(e.encode_into());
self.send(message)
}
@@ -31,7 +28,7 @@ pub trait LoginWebsocketExt: WebsocketExt {
"Expected Login message, got other message type"
));
};
message.0.decode_into()
message.decode()
}
}

View File

@@ -7,8 +7,7 @@ use encoding::{
EncodedResult, JsonMessage, WithChannel,
};
use periphery_client::transport::{
DecodedTransportMessage, EncodedResponseMessage,
EncodedTransportMessage, TransportMessage,
DecodedTransportMessage, EncodedTransportMessage, TransportMessage,
};
use serde::Serialize;
use tokio_util::sync::CancellationToken;
@@ -145,13 +144,13 @@ pub trait WebsocketSenderExt: WebsocketSender + Send {
channel: Uuid,
response: EncodedResult<EncodedJsonMessage>,
) -> impl Future<Output = anyhow::Result<()>> + Send {
let message = TransportMessage::Response(EncodedResponseMessage(
let message = TransportMessage::Response(
WithChannel {
channel,
data: Some(response).encode(),
data: response,
}
.encode(),
));
);
self.send(message)
}