diff --git a/api/src/api/backup.rs b/api/src/api/backup.rs index c530ceb..dca9184 100644 --- a/api/src/api/backup.rs +++ b/api/src/api/backup.rs @@ -10,3 +10,25 @@ pub struct Shard { #[n(0)] pub payload: Vec, } + +#[quantum_link] +pub struct BackupShardRequest(#[n(0)] pub Shard); + +#[quantum_link] +pub enum BackupShardResponse { + #[n(0)] + Success, + #[n(1)] + Error(#[n(0)] String), +} + +#[quantum_link] +pub struct RestoreShardRequest; + +#[quantum_link] +pub enum RestoreShardResponse { + #[n(0)] + Success(#[n(0)] Shard), + #[n(1)] + Error(#[n(0)] String), +} diff --git a/api/src/api/firmware.rs b/api/src/api/firmware.rs index acd2bad..3943eb9 100644 --- a/api/src/api/firmware.rs +++ b/api/src/api/firmware.rs @@ -4,49 +4,70 @@ use minicbor_derive::{Decode, Encode}; use quantum_link_macros::quantum_link; #[quantum_link] -pub struct FirmwareUpdate { +pub struct FirmwareUpdateCheckRequest { + #[n(0)] + pub current_version: String, +} + +#[quantum_link] +pub enum FirmwareUpdateCheckResponse { + #[n(0)] + Available(#[n(0)] FirmwareUpdateAvailable), + #[n(1)] + NotAvailable, +} + +#[quantum_link] +pub struct FirmwareUpdateAvailable { #[n(0)] pub version: String, #[n(1)] - pub timestamp: u32, - #[n(2)] pub changelog: String, + #[n(2)] + pub timestamp: u32, + #[n(3)] + pub size: u32, } -impl FirmwareUpdate { - pub fn new(version: String, timestamp: u32, changelog: String) -> Self { - Self { - version, - timestamp, - changelog, - } - } - - pub fn version(&self) -> &str { - &self.version - } - - pub fn timestamp(&self) -> u32 { - self.timestamp - } - - pub fn changelog(&self) -> &str { - &self.changelog - } +#[quantum_link] +pub struct FirmwareDownloadRequest { + #[n(0)] + pub version: String, } #[quantum_link] -pub struct FirmwarePayload { +pub enum FirmwareDownloadResponse { #[n(0)] - pub payload: Vec, + EnvoyDownloadProgress { + #[n(0)] + progress: f32, + }, + #[n(1)] + Start { + #[n(0)] + total_chunks: u16, + }, + #[n(2)] + Chunk(#[n(0)] FirmwareChunk), + #[n(3)] + Error(#[n(0)] String), } -impl FirmwarePayload { - pub fn new(payload: Vec) -> Self { - Self { payload } - } +#[quantum_link] +pub struct FirmwareChunk { + #[n(0)] + pub index: u16, + #[n(1)] + pub data: Vec, +} - pub fn payload(&self) -> &Vec { - &self.payload - } +#[quantum_link] +pub enum FirmwareUpdateResult { + #[n(0)] + Success { + #[n(0)] + installed_version: String, + }, + #[n(1)] + Error(#[n(0)] String), } diff --git a/api/src/api/message.rs b/api/src/api/message.rs index 97390c8..a103eeb 100644 --- a/api/src/api/message.rs +++ b/api/src/api/message.rs @@ -1,12 +1,17 @@ use super::onboarding::OnboardingState; use crate::api::raw::RawData; -use crate::backup::Shard; +use crate::backup::{ + BackupShardRequest, BackupShardResponse, RestoreShardRequest, RestoreShardResponse, +}; use crate::bitcoin::*; -use crate::firmware::{FirmwarePayload, FirmwareUpdate}; +use crate::firmware::{ + FirmwareDownloadRequest, FirmwareDownloadResponse, FirmwareUpdateCheckRequest, + FirmwareUpdateCheckResponse, FirmwareUpdateResult, +}; use crate::fx::ExchangeRate; use crate::pairing::{PairingRequest, PairingResponse}; use crate::quantum_link::QuantumLink; -use crate::scv::{SecurityChallengeMessage, SecurityProofMessage}; +use crate::scv::{SecurityChallengeRequest, SecurityChallengeResponse}; use crate::status::{DeviceStatus, EnvoyStatus}; use flutter_rust_bridge::frb; use minicbor_derive::{Decode, Encode}; @@ -67,31 +72,43 @@ pub enum QuantumLinkMessage { #[n(0)] ExchangeRate(#[n(0)] ExchangeRate), #[n(1)] - FirmwareUpdate(#[n(0)] FirmwareUpdate), + FirmwareUpdateCheckRequest(#[n(0)] FirmwareUpdateCheckRequest), #[n(2)] - DeviceStatus(#[n(0)] DeviceStatus), + FirmwareUpdateCheckResponse(#[n(0)] FirmwareUpdateCheckResponse), #[n(3)] - EnvoyStatus(#[n(0)] EnvoyStatus), + FirmwareDownloadRequest(#[n(0)] FirmwareDownloadRequest), #[n(4)] - PairingResponse(#[n(0)] PairingResponse), + FirmwareDownloadResponse(#[n(0)] FirmwareDownloadResponse), #[n(5)] - PairingRequest(#[n(0)] PairingRequest), + FirmwareUpdateResult(#[n(0)] FirmwareUpdateResult), #[n(6)] - OnboardingState(#[n(0)] OnboardingState), + DeviceStatus(#[n(0)] DeviceStatus), #[n(7)] - SignPsbt(#[n(0)] SignPsbt), + EnvoyStatus(#[n(0)] EnvoyStatus), #[n(8)] - AccountUpdate(#[n(0)] AccountUpdate), + PairingRequest(#[n(0)] PairingRequest), #[n(9)] - FirmwarePayload(#[n(0)] FirmwarePayload), + PairingResponse(#[n(0)] PairingResponse), #[n(10)] - BroadcastTransaction(#[n(0)] BroadcastTransaction), + OnboardingState(#[n(0)] OnboardingState), #[n(11)] - SecurityChallengeMessage(#[n(0)] SecurityChallengeMessage), + SignPsbt(#[n(0)] SignPsbt), #[n(12)] - SecurityProofMessage(#[n(0)] SecurityProofMessage), + BroadcastTransaction(#[n(0)] BroadcastTransaction), #[n(13)] - Shard(#[n(0)] Shard), + AccountUpdate(#[n(0)] AccountUpdate), #[n(14)] + SecurityChallengeRequest(#[n(0)] SecurityChallengeRequest), + #[n(15)] + SecurityChallengeResponse(#[n(0)] SecurityChallengeResponse), + #[n(16)] + BackupShardRequest(#[n(0)] BackupShardRequest), + #[n(17)] + BackupShardResponse(#[n(0)] BackupShardResponse), + #[n(18)] + RestoreShardRequest(#[n(0)] RestoreShardRequest), + #[n(19)] + RestoreShardResponse(#[n(0)] RestoreShardResponse), + #[n(20)] RawData(#[n(0)] RawData), } diff --git a/api/src/api/scv.rs b/api/src/api/scv.rs index 8287e2a..4b361a4 100644 --- a/api/src/api/scv.rs +++ b/api/src/api/scv.rs @@ -70,14 +70,14 @@ impl ChallengeResponse { } #[quantum_link] -pub struct SecurityChallengeMessage { +pub struct SecurityChallengeRequest { #[n(0)] pub data: Vec, } -impl SecurityChallengeMessage { +impl SecurityChallengeRequest { pub fn new(data: Vec) -> Self { - SecurityChallengeMessage { data } + SecurityChallengeRequest { data } } pub fn data(&self) -> &Vec { @@ -86,14 +86,14 @@ impl SecurityChallengeMessage { } #[quantum_link] -pub struct SecurityProofMessage { +pub struct SecurityChallengeResponse { #[n(0)] pub data: Vec, } -impl SecurityProofMessage { +impl SecurityChallengeResponse { pub fn new(data: Vec) -> Self { - SecurityProofMessage { data } + SecurityChallengeResponse { data } } pub fn data(&self) -> &Vec {