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 hd_index: u32,
18 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}