Skip to main content

uptrakit_web_api_types/
surfaces.rs

1use serde::{Deserialize, Serialize};
2use uptrakit_wire::surfaces::{self, SurfaceDescriptor};
3use uuid::Uuid;
4
5/// Query parameters for listing registered surfaces.
6#[derive(Debug, Clone, Deserialize)]
7pub struct ListSurfacesQuery {
8    #[serde(default)]
9    pub slot: Option<String>,
10    #[serde(default)]
11    pub page: Option<String>,
12}
13
14/// Surface list item returned by `/api/v1/surfaces`.
15#[derive(Debug, Clone, Serialize, Deserialize)]
16pub struct SurfaceResponse {
17    #[serde(flatten)]
18    pub descriptor: SurfaceDescriptor,
19    pub provider_count: usize,
20}
21
22/// Tenant-compatibility/availability state for a targeted provider.
23#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
24#[serde(rename_all = "snake_case")]
25pub enum SurfaceProviderAvailability {
26    Available,
27    Disconnected,
28    IncompatibleTenant,
29}
30
31/// Provider information returned for a targeted surface.
32#[derive(Debug, Clone, Serialize, Deserialize)]
33pub struct SurfaceProviderInfo {
34    pub provider_id: String,
35    pub display_label: String,
36    #[serde(default, skip_serializing_if = "Option::is_none")]
37    pub service_id: Option<Uuid>,
38    pub availability: SurfaceProviderAvailability,
39    #[serde(default, skip_serializing_if = "Option::is_none")]
40    pub encryption_metadata: Option<surfaces::ProviderEncryptionMetadata>,
41}
42
43/// Surface read payload used by frontend route rendering.
44#[derive(Debug, Clone, Serialize, Deserialize)]
45pub struct SurfaceReadResponse {
46    pub descriptor: SurfaceDescriptor,
47    #[serde(default)]
48    pub interactions: Vec<surfaces::InteractionDescriptor>,
49    #[serde(default)]
50    pub data_sources: Vec<surfaces::DataSourceDescriptor>,
51}
52
53/// Request body for invoking a surface interaction.
54#[derive(Debug, Clone, Serialize, Deserialize)]
55pub struct InvokeSurfaceInteractionRequest {
56    #[serde(default)]
57    pub params: serde_json::Map<String, serde_json::Value>,
58    #[serde(default, skip_serializing_if = "Option::is_none")]
59    pub encrypted_sensitive_params: Option<surfaces::EncryptedSensitiveParams>,
60    #[serde(default, skip_serializing_if = "Option::is_none")]
61    pub target_provider_id: Option<String>,
62    /// Optional idempotency key. If omitted, the server generates one.
63    #[serde(default, skip_serializing_if = "Option::is_none")]
64    pub idempotency_key: Option<String>,
65    /// Optional timeout override for this invocation.
66    #[serde(default, skip_serializing_if = "Option::is_none")]
67    pub timeout_seconds: Option<u16>,
68}