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/// Controller-owned rollout signal for the shared surface runtime.
44#[derive(Debug, Clone, Serialize, Deserialize)]
45pub struct SurfaceRuntimeStatusResponse {
46    pub active: bool,
47}
48
49/// Surface read payload used by frontend route rendering.
50#[derive(Debug, Clone, Serialize, Deserialize)]
51pub struct SurfaceReadResponse {
52    pub descriptor: SurfaceDescriptor,
53    #[serde(default)]
54    pub interactions: Vec<surfaces::InteractionDescriptor>,
55    #[serde(default)]
56    pub data_sources: Vec<surfaces::DataSourceDescriptor>,
57}
58
59/// Request body for invoking a surface interaction.
60#[derive(Debug, Clone, Serialize, Deserialize)]
61pub struct InvokeSurfaceInteractionRequest {
62    #[serde(default)]
63    pub params: serde_json::Map<String, serde_json::Value>,
64    #[serde(default, skip_serializing_if = "Option::is_none")]
65    pub encrypted_sensitive_params: Option<surfaces::EncryptedSensitiveParams>,
66    #[serde(default, skip_serializing_if = "Option::is_none")]
67    pub target_provider_id: Option<String>,
68    /// Optional idempotency key. If omitted, the server generates one.
69    #[serde(default, skip_serializing_if = "Option::is_none")]
70    pub idempotency_key: Option<String>,
71    /// Optional timeout override for this invocation.
72    #[serde(default, skip_serializing_if = "Option::is_none")]
73    pub timeout_seconds: Option<u16>,
74}