wavs_types/
http.rs

1pub mod aggregator;
2use std::collections::HashMap;
3
4use super::Service;
5use crate::{
6    AnyChainConfig, ByteArray, ChainKey, ComponentDigest, ServiceDigest, ServiceId, ServiceManager,
7    Trigger, TriggerData, WorkflowId,
8};
9use serde::{Deserialize, Serialize};
10use utoipa::ToSchema;
11
12#[derive(Serialize, Deserialize, Clone, Debug, ToSchema)]
13#[serde(rename_all = "snake_case")]
14pub enum SignerResponse {
15    Secp256k1 {
16        /// The derivation index used to create this key from the mnemonic
17        hd_index: u32,
18        /// The evm-style address ("0x" prefixed hex string) derived from the key
19        evm_address: String,
20    },
21}
22
23#[derive(Serialize, Deserialize, Clone, Debug, ToSchema)]
24pub struct AddServiceRequest {
25    pub service_manager: ServiceManager,
26}
27
28#[derive(Serialize, Deserialize, Clone, Debug, ToSchema)]
29pub struct GetSignerRequest {
30    pub service_manager: ServiceManager,
31}
32
33#[derive(Serialize, Deserialize, Clone, Debug, ToSchema)]
34pub struct AddChainRequest {
35    pub chain: ChainKey,
36    pub config: AnyChainConfig,
37}
38
39#[derive(Serialize, Deserialize, ToSchema)]
40pub struct DeleteServicesRequest {
41    pub service_managers: Vec<ServiceManager>,
42}
43
44#[derive(Serialize, Deserialize, ToSchema)]
45pub struct ListServicesResponse {
46    pub services: Vec<Service>,
47    pub service_ids: Vec<ServiceId>,
48    pub component_digests: Vec<ComponentDigest>,
49}
50
51#[derive(Serialize, Deserialize, ToSchema)]
52pub struct UploadComponentResponse {
53    pub digest: ComponentDigest,
54}
55
56#[derive(Serialize, Deserialize, Clone, Debug, ToSchema)]
57pub struct SaveServiceResponse {
58    pub hash: ServiceDigest,
59}
60
61#[derive(Serialize, Deserialize, Debug, ToSchema)]
62pub struct SimulatedTriggerRequest {
63    pub service_id: ServiceId,
64    pub workflow_id: WorkflowId,
65    pub trigger: Trigger,
66    #[schema(value_type = Object)]
67    pub data: TriggerData,
68    #[serde(default = "default_simulated_trigger_count")]
69    pub count: usize,
70    pub wait_for_completion: bool,
71}
72
73fn default_simulated_trigger_count() -> usize {
74    1
75}
76
77#[derive(Debug, Serialize, Deserialize, utoipa::ToSchema)]
78pub struct DevTriggerStreamsInfo {
79    pub chains: HashMap<ChainKey, DevTriggerStreamInfo>,
80}
81
82impl DevTriggerStreamsInfo {
83    pub fn finalized(&self) -> bool {
84        self.chains.values().all(|info| {
85            !info.any_active_rpcs_in_flight && info.is_connected && info.current_endpoint.is_some()
86        })
87    }
88
89    pub fn any_active_subscriptions(&self) -> bool {
90        self.chains
91            .values()
92            .any(|info| !info.active_subscriptions.is_empty())
93    }
94}
95
96#[derive(Debug, Serialize, Deserialize, utoipa::ToSchema)]
97pub struct DevTriggerStreamInfo {
98    pub current_endpoint: Option<String>,
99    pub is_connected: bool,
100    pub any_active_rpcs_in_flight: bool,
101    pub active_subscriptions: HashMap<String, DevTriggerStreamSubscriptionKind>,
102}
103
104#[derive(Debug, Serialize, Deserialize, utoipa::ToSchema)]
105pub enum DevTriggerStreamSubscriptionKind {
106    NewHeads,
107    Logs {
108        addresses: Vec<ByteArray<20>>,
109        topics: Vec<ByteArray<32>>,
110    },
111    NewPendingTransactions,
112}