1use crate::ConversationAudience;
2use serde::{Deserialize, Serialize};
3use serde_json::Value;
4
5#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
6#[serde(rename_all = "lowercase")]
7pub enum Placement {
8 Local,
9 Cloud,
10}
11
12#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
13#[serde(rename_all = "camelCase", deny_unknown_fields)]
14pub struct FrontendProvider {
15 pub provider: String,
16 pub deprecated: bool,
17 pub supported_placements: Vec<Placement>,
18}
19
20#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
21#[serde(rename_all = "camelCase", deny_unknown_fields)]
22pub struct ProviderListRequest {
23 pub placement: Placement,
24 pub frontend_providers: Vec<FrontendProvider>,
25}
26
27#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
28#[serde(rename_all = "camelCase", deny_unknown_fields)]
29pub struct ProviderMetadata {
30 pub provider: String,
31 pub display_name: String,
32 pub placement: Placement,
33 pub deprecated: bool,
34 pub available: bool,
35 #[serde(default, skip_serializing_if = "Option::is_none")]
36 pub disabled_reason: Option<String>,
37 pub setup_flow: String,
38 pub audiences: Vec<ConversationAudience>,
39 pub inbound_capabilities: Vec<ContentCapability>,
40 pub outbound_capabilities: Vec<ContentCapability>,
41 pub delivery_mode: DeliveryMode,
42 pub management_operations: Vec<ManagementOperation>,
43 pub provider_data: Value,
44}
45
46#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
47#[serde(rename_all = "snake_case")]
48pub enum ContentCapability {
49 Text,
50 Markdown,
51 Image,
52 Audio,
53 Action,
54}
55
56#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
57#[serde(rename_all = "snake_case")]
58pub enum DeliveryMode {
59 Unrestricted,
60 SessionWindow,
61}
62
63#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
64pub enum ManagementOperation {
65 #[serde(rename = "connection.list")]
66 ConnectionList,
67 #[serde(rename = "connection.update")]
68 ConnectionUpdate,
69 #[serde(rename = "connection.delete")]
70 ConnectionDelete,
71 #[serde(rename = "connection.test")]
72 ConnectionTest,
73 #[serde(rename = "connection.status")]
74 ConnectionStatus,
75 #[serde(rename = "account.bind")]
76 AccountBind,
77 #[serde(rename = "account.unbind")]
78 AccountUnbind,
79 #[serde(rename = "account.binding.list")]
80 AccountBindingList,
81 #[serde(rename = "setup.options")]
82 SetupOptions,
83 #[serde(rename = "setup.start")]
84 SetupStart,
85 #[serde(rename = "setup.status")]
86 SetupStatus,
87 #[serde(rename = "surface.list")]
88 SurfaceList,
89 #[serde(rename = "surface.dismiss")]
90 SurfaceDismiss,
91 #[serde(rename = "surface.bind_code.create")]
92 SurfaceBindCodeCreate,
93 #[serde(rename = "actor.link_code.create")]
94 ActorLinkCodeCreate,
95 #[serde(rename = "actor.link.list")]
96 ActorLinkList,
97 #[serde(rename = "actor.link.delete")]
98 ActorLinkDelete,
99}
100
101#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
102#[serde(rename_all = "camelCase", deny_unknown_fields)]
103pub struct ProviderListResponse {
104 pub providers: Vec<ProviderMetadata>,
105}
106
107#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
108#[serde(rename_all = "camelCase", deny_unknown_fields)]
109pub struct ProviderPlacementRequest {
110 pub provider: String,
111 pub placement: Placement,
112}
113
114#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
115#[serde(rename_all = "camelCase", deny_unknown_fields)]
116pub struct ConnectionUpdateRequest {
117 pub provider: String,
118 pub placement: Placement,
119 #[serde(default, skip_serializing_if = "Option::is_none")]
120 pub connection_id: Option<String>,
121 pub data: Value,
122}
123
124#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
125#[serde(rename_all = "camelCase", deny_unknown_fields)]
126pub struct ConnectionRequest {
127 pub provider: String,
128 pub placement: Placement,
129 pub connection_id: String,
130}
131
132#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
133#[serde(rename_all = "camelCase", deny_unknown_fields)]
134pub struct ConnectionTestRequest {
135 pub provider: String,
136 pub placement: Placement,
137 pub data: Value,
138}
139
140#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
141#[serde(rename_all = "camelCase", deny_unknown_fields)]
142pub struct MessagingConnection {
143 pub provider: String,
144 pub placement: Placement,
145 pub connection_id: String,
146 pub account_id: String,
147 #[serde(default, skip_serializing_if = "Option::is_none")]
148 pub display_name: Option<String>,
149 pub enabled: bool,
150 pub status: String,
151 #[serde(default, skip_serializing_if = "Option::is_none")]
152 pub status_message: Option<String>,
153 pub bound_to_current_scope: bool,
154 pub provider_data: Value,
155}
156
157#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
158#[serde(rename_all = "camelCase", deny_unknown_fields)]
159pub struct ConnectionListResponse {
160 pub connections: Vec<MessagingConnection>,
161}
162
163#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
164#[serde(rename_all = "camelCase", deny_unknown_fields)]
165pub struct ConnectionUpdateResponse {
166 pub connection: MessagingConnection,
167}
168
169#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
170#[serde(rename_all = "camelCase", deny_unknown_fields)]
171pub struct ConnectionTestResponse {
172 pub result: Value,
173}
174
175#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
176#[serde(rename_all = "camelCase", deny_unknown_fields)]
177pub struct ProviderStatus {
178 pub provider: String,
179 pub placement: Placement,
180 pub enabled: bool,
181 pub provider_data: Value,
182}
183
184#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
185#[serde(rename_all = "camelCase", deny_unknown_fields)]
186pub struct ConnectionStatusResponse {
187 pub status: ProviderStatus,
188}
189
190#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
191#[serde(rename_all = "camelCase", deny_unknown_fields)]
192pub struct MutationResponse {
193 pub success: bool,
194}
195
196#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
197#[serde(rename_all = "camelCase", deny_unknown_fields)]
198pub struct AccountBindingRequest {
199 pub provider: String,
200 pub placement: Placement,
201 pub account_id: String,
202}
203
204#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
205#[serde(rename_all = "camelCase", deny_unknown_fields)]
206pub struct AccountBinding {
207 pub tenant_id: String,
208 pub scope_id: String,
209 pub user_id: String,
210 pub default: bool,
211}
212
213#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
214#[serde(rename_all = "camelCase", deny_unknown_fields)]
215pub struct AccountBindingListResponse {
216 pub bindings: Vec<AccountBinding>,
217}
218
219#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
220#[serde(rename_all = "camelCase", deny_unknown_fields)]
221pub struct SetupStartRequest {
222 pub provider: String,
223 pub placement: Placement,
224 pub data: Value,
225}
226
227#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
228#[serde(rename_all = "camelCase", deny_unknown_fields)]
229pub struct SetupOptionsResponse {
230 pub options: Value,
231}
232
233#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
234#[serde(rename_all = "camelCase", deny_unknown_fields)]
235pub struct SetupStatusRequest {
236 pub provider: String,
237 pub placement: Placement,
238 pub setup_id: String,
239}
240
241#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
242#[serde(rename_all = "camelCase", deny_unknown_fields)]
243pub struct SetupAction {
244 #[serde(rename = "type")]
245 pub kind: String,
246 #[serde(default, skip_serializing_if = "Option::is_none")]
247 pub url: Option<String>,
248}
249
250#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
251#[serde(rename_all = "camelCase", deny_unknown_fields)]
252pub struct SetupState {
253 #[serde(default, skip_serializing_if = "Option::is_none")]
254 pub setup_id: Option<String>,
255 pub status: String,
256 #[serde(default, skip_serializing_if = "Option::is_none")]
257 pub expires_at_ms: Option<i64>,
258 #[serde(default, skip_serializing_if = "Option::is_none")]
259 pub action: Option<SetupAction>,
260 pub provider_data: Value,
261 #[serde(default, skip_serializing_if = "Option::is_none")]
262 pub connection_id: Option<String>,
263 #[serde(default, skip_serializing_if = "Option::is_none")]
264 pub message: Option<String>,
265}
266
267#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
268#[serde(rename_all = "camelCase", deny_unknown_fields)]
269pub struct SetupResponse {
270 pub setup: SetupState,
271}
272
273#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
274#[serde(rename_all = "lowercase")]
275pub enum SurfaceState {
276 Pending,
277 Bound,
278 Dismissed,
279}
280
281#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
282#[serde(rename_all = "camelCase", deny_unknown_fields)]
283pub struct SurfaceListRequest {
284 pub provider: String,
285 pub placement: Placement,
286 #[serde(default, skip_serializing_if = "Option::is_none")]
287 pub account_id: Option<String>,
288 #[serde(default, skip_serializing_if = "Option::is_none")]
289 pub state: Option<SurfaceState>,
290}
291
292#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
293#[serde(rename_all = "camelCase", deny_unknown_fields)]
294pub struct MessagingSurface {
295 pub provider: String,
296 pub placement: Placement,
297 pub account_id: String,
298 pub surface_id: String,
299 #[serde(default, skip_serializing_if = "Option::is_none")]
300 pub display_name: Option<String>,
301 pub state: SurfaceState,
302 #[serde(default, skip_serializing_if = "Option::is_none")]
303 pub scope_id: Option<String>,
304 pub first_seen_at_ms: i64,
305 pub last_seen_at_ms: i64,
306}
307
308#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
309#[serde(rename_all = "camelCase", deny_unknown_fields)]
310pub struct SurfaceListResponse {
311 pub surfaces: Vec<MessagingSurface>,
312}
313
314#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
315#[serde(rename_all = "camelCase", deny_unknown_fields)]
316pub struct SurfaceRequest {
317 pub provider: String,
318 pub placement: Placement,
319 pub surface_id: String,
320}
321
322#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
323#[serde(rename_all = "camelCase", deny_unknown_fields)]
324pub struct SurfaceBindCodeCreateRequest {
325 pub provider: String,
326 pub placement: Placement,
327 pub surface_id: String,
328 pub scope_id: String,
329}
330
331#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
332#[serde(rename_all = "camelCase", deny_unknown_fields)]
333pub struct ActorLinkCodeCreateRequest {
334 pub provider: String,
335 pub placement: Placement,
336 pub surface_id: String,
337}
338
339#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
340#[serde(rename_all = "camelCase", deny_unknown_fields)]
341pub struct ChallengeCode {
342 pub code: String,
343 pub command: String,
344 pub expires_at_ms: i64,
345}
346
347#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
348#[serde(rename_all = "camelCase", deny_unknown_fields)]
349pub struct ChallengeCodeResponse {
350 pub challenge: ChallengeCode,
351}
352
353#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
354#[serde(rename_all = "camelCase", deny_unknown_fields)]
355pub struct ActorLinkListRequest {
356 pub provider: String,
357 pub placement: Placement,
358 #[serde(default, skip_serializing_if = "Option::is_none")]
359 pub surface_id: Option<String>,
360}
361
362#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
363#[serde(rename_all = "camelCase", deny_unknown_fields)]
364pub struct ActorLinkView {
365 pub link_id: String,
366 pub provider: String,
367 pub placement: Placement,
368 pub account_id: String,
369 #[serde(default, skip_serializing_if = "Option::is_none")]
370 pub display_name: Option<String>,
371 pub created_at_ms: i64,
372}
373
374#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
375#[serde(rename_all = "camelCase", deny_unknown_fields)]
376pub struct ActorLinkListResponse {
377 pub links: Vec<ActorLinkView>,
378}
379
380#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
381#[serde(rename_all = "camelCase", deny_unknown_fields)]
382pub struct ActorLinkDeleteRequest {
383 pub provider: String,
384 pub placement: Placement,
385 pub link_id: String,
386}