Skip to main content

livekit_protocol/
livekit.rs

1// @generated
2// This file is @generated by prost-build.
3#[derive(Clone, PartialEq, ::prost::Message)]
4pub struct MetricsBatch {
5    /// time at which this batch is sent based on a monotonic clock (millisecond resolution)
6    #[prost(int64, tag = "1")]
7    pub timestamp_ms: i64,
8    #[prost(message, optional, tag = "2")]
9    pub normalized_timestamp: ::core::option::Option<::pbjson_types::Timestamp>,
10    /// To avoid repeating string values, we store them in a separate list and reference them by index
11    /// This is useful for storing participant identities, track names, etc.
12    /// There is also a predefined list of labels that can be used to reference common metrics.
13    /// They have reserved indices from 0 to (METRIC_LABEL_PREDEFINED_MAX_VALUE - 1).
14    /// Indexes pointing at str_data should start from METRIC_LABEL_PREDEFINED_MAX_VALUE,
15    /// such that str_data\[0\] == index of METRIC_LABEL_PREDEFINED_MAX_VALUE.
16    #[prost(string, repeated, tag = "3")]
17    pub str_data: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
18    #[prost(message, repeated, tag = "4")]
19    pub time_series: ::prost::alloc::vec::Vec<TimeSeriesMetric>,
20    #[prost(message, repeated, tag = "5")]
21    pub events: ::prost::alloc::vec::Vec<EventMetric>,
22}
23#[derive(Clone, PartialEq, ::prost::Message)]
24pub struct TimeSeriesMetric {
25    /// Metric name e.g "speech_probablity". The string value is not directly stored in the message, but referenced by index
26    /// in the `str_data` field of `MetricsBatch`
27    #[prost(uint32, tag = "1")]
28    pub label: u32,
29    /// index into `str_data`
30    #[prost(uint32, tag = "2")]
31    pub participant_identity: u32,
32    /// index into `str_data`
33    #[prost(uint32, tag = "3")]
34    pub track_sid: u32,
35    #[prost(message, repeated, tag = "4")]
36    pub samples: ::prost::alloc::vec::Vec<MetricSample>,
37    /// index into 'str_data'
38    #[prost(uint32, tag = "5")]
39    pub rid: u32,
40}
41#[derive(Clone, Copy, PartialEq, ::prost::Message)]
42pub struct MetricSample {
43    /// time of metric based on a monotonic clock (in milliseconds)
44    #[prost(int64, tag = "1")]
45    pub timestamp_ms: i64,
46    #[prost(message, optional, tag = "2")]
47    pub normalized_timestamp: ::core::option::Option<::pbjson_types::Timestamp>,
48    #[prost(float, tag = "3")]
49    pub value: f32,
50}
51#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
52pub struct EventMetric {
53    #[prost(uint32, tag = "1")]
54    pub label: u32,
55    /// index into `str_data`
56    #[prost(uint32, tag = "2")]
57    pub participant_identity: u32,
58    /// index into `str_data`
59    #[prost(uint32, tag = "3")]
60    pub track_sid: u32,
61    /// start time of event based on a monotonic clock (in milliseconds)
62    #[prost(int64, tag = "4")]
63    pub start_timestamp_ms: i64,
64    /// end time of event based on a monotonic clock (in milliseconds), if needed
65    #[prost(int64, optional, tag = "5")]
66    pub end_timestamp_ms: ::core::option::Option<i64>,
67    #[prost(message, optional, tag = "6")]
68    pub normalized_start_timestamp: ::core::option::Option<::pbjson_types::Timestamp>,
69    #[prost(message, optional, tag = "7")]
70    pub normalized_end_timestamp: ::core::option::Option<::pbjson_types::Timestamp>,
71    #[prost(string, tag = "8")]
72    pub metadata: ::prost::alloc::string::String,
73    /// index into 'str_data'
74    #[prost(uint32, tag = "9")]
75    pub rid: u32,
76}
77#[derive(Clone, PartialEq, ::prost::Message)]
78pub struct MetricsRecordingHeader {
79    #[prost(string, tag = "1")]
80    pub room_id: ::prost::alloc::string::String,
81    /// milliseconds
82    #[prost(uint64, tag = "3")]
83    pub duration: u64,
84    #[prost(message, optional, tag = "4")]
85    pub start_time: ::core::option::Option<::pbjson_types::Timestamp>,
86    #[prost(map = "string, string", tag = "5")]
87    pub room_tags: ::std::collections::HashMap<::prost::alloc::string::String, ::prost::alloc::string::String>,
88    #[prost(string, tag = "6")]
89    pub room_name: ::prost::alloc::string::String,
90    #[prost(message, optional, tag = "7")]
91    pub room_start_time: ::core::option::Option<::pbjson_types::Timestamp>,
92    #[prost(string, tag = "8")]
93    pub job_id: ::prost::alloc::string::String,
94    /// session is a simulation; the collector skips PII redaction for it unless redaction_enabled is set
95    #[prost(bool, tag = "9")]
96    pub simulated: bool,
97    /// force PII redaction on for this session (only ever enables, never disables)
98    #[prost(bool, tag = "10")]
99    pub redaction_enabled: bool,
100}
101//
102// Protocol used to record metrics for a specific session.
103//
104// Clients send their timestamp in their own monotonically increasing time (e.g `performance.now` on JS).
105// These timestamps are then augmented by the SFU to its time base.
106//
107// A metric can be linked to a specific track by setting `track_sid`.
108
109/// index from [0: MAX_LABEL_PREDEFINED_MAX_VALUE) are for predefined labels (`MetricLabel`)
110#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
111#[repr(i32)]
112pub enum MetricLabel {
113    /// time to first token from LLM
114    AgentsLlmTtft = 0,
115    /// time to final transcription
116    AgentsSttTtft = 1,
117    /// time to first byte
118    AgentsTtsTtfb = 2,
119    /// Number of video freezes
120    ClientVideoSubscriberFreezeCount = 3,
121    /// total duration of freezes
122    ClientVideoSubscriberTotalFreezeDuration = 4,
123    /// number of video pauses
124    ClientVideoSubscriberPauseCount = 5,
125    /// total duration of pauses
126    ClientVideoSubscriberTotalPausesDuration = 6,
127    /// number of concealed (synthesized) audio samples
128    ClientAudioSubscriberConcealedSamples = 7,
129    /// number of silent concealed samples
130    ClientAudioSubscriberSilentConcealedSamples = 8,
131    /// number of concealment events
132    ClientAudioSubscriberConcealmentEvents = 9,
133    /// number of interruptions
134    ClientAudioSubscriberInterruptionCount = 10,
135    /// total duration of interruptions
136    ClientAudioSubscriberTotalInterruptionDuration = 11,
137    /// total time spent in jitter buffer
138    ClientSubscriberJitterBufferDelay = 12,
139    /// total time spent in jitter buffer
140    ClientSubscriberJitterBufferEmittedCount = 13,
141    /// total duration spent in bandwidth quality limitation
142    ClientVideoPublisherQualityLimitationDurationBandwidth = 14,
143    /// total duration spent in cpu quality limitation
144    ClientVideoPublisherQualityLimitationDurationCpu = 15,
145    /// total duration spent in other quality limitation
146    ClientVideoPublisherQualityLimitationDurationOther = 16,
147    /// Publisher RTT (participant -> server)
148    PublisherRtt = 17,
149    /// RTT between publisher node and subscriber node (could involve intermedia node(s))
150    ServerMeshRtt = 18,
151    /// Subscribe RTT (server -> participant)
152    SubscriberRtt = 19,
153    PredefinedMaxValue = 4096,
154}
155impl MetricLabel {
156    /// String value of the enum field names used in the ProtoBuf definition.
157    ///
158    /// The values are not transformed in any way and thus are considered stable
159    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
160    pub fn as_str_name(&self) -> &'static str {
161        match self {
162            Self::AgentsLlmTtft => "AGENTS_LLM_TTFT",
163            Self::AgentsSttTtft => "AGENTS_STT_TTFT",
164            Self::AgentsTtsTtfb => "AGENTS_TTS_TTFB",
165            Self::ClientVideoSubscriberFreezeCount => "CLIENT_VIDEO_SUBSCRIBER_FREEZE_COUNT",
166            Self::ClientVideoSubscriberTotalFreezeDuration => "CLIENT_VIDEO_SUBSCRIBER_TOTAL_FREEZE_DURATION",
167            Self::ClientVideoSubscriberPauseCount => "CLIENT_VIDEO_SUBSCRIBER_PAUSE_COUNT",
168            Self::ClientVideoSubscriberTotalPausesDuration => "CLIENT_VIDEO_SUBSCRIBER_TOTAL_PAUSES_DURATION",
169            Self::ClientAudioSubscriberConcealedSamples => "CLIENT_AUDIO_SUBSCRIBER_CONCEALED_SAMPLES",
170            Self::ClientAudioSubscriberSilentConcealedSamples => "CLIENT_AUDIO_SUBSCRIBER_SILENT_CONCEALED_SAMPLES",
171            Self::ClientAudioSubscriberConcealmentEvents => "CLIENT_AUDIO_SUBSCRIBER_CONCEALMENT_EVENTS",
172            Self::ClientAudioSubscriberInterruptionCount => "CLIENT_AUDIO_SUBSCRIBER_INTERRUPTION_COUNT",
173            Self::ClientAudioSubscriberTotalInterruptionDuration => "CLIENT_AUDIO_SUBSCRIBER_TOTAL_INTERRUPTION_DURATION",
174            Self::ClientSubscriberJitterBufferDelay => "CLIENT_SUBSCRIBER_JITTER_BUFFER_DELAY",
175            Self::ClientSubscriberJitterBufferEmittedCount => "CLIENT_SUBSCRIBER_JITTER_BUFFER_EMITTED_COUNT",
176            Self::ClientVideoPublisherQualityLimitationDurationBandwidth => "CLIENT_VIDEO_PUBLISHER_QUALITY_LIMITATION_DURATION_BANDWIDTH",
177            Self::ClientVideoPublisherQualityLimitationDurationCpu => "CLIENT_VIDEO_PUBLISHER_QUALITY_LIMITATION_DURATION_CPU",
178            Self::ClientVideoPublisherQualityLimitationDurationOther => "CLIENT_VIDEO_PUBLISHER_QUALITY_LIMITATION_DURATION_OTHER",
179            Self::PublisherRtt => "PUBLISHER_RTT",
180            Self::ServerMeshRtt => "SERVER_MESH_RTT",
181            Self::SubscriberRtt => "SUBSCRIBER_RTT",
182            Self::PredefinedMaxValue => "METRIC_LABEL_PREDEFINED_MAX_VALUE",
183        }
184    }
185    /// Creates an enum from field names used in the ProtoBuf definition.
186    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
187        match value {
188            "AGENTS_LLM_TTFT" => Some(Self::AgentsLlmTtft),
189            "AGENTS_STT_TTFT" => Some(Self::AgentsSttTtft),
190            "AGENTS_TTS_TTFB" => Some(Self::AgentsTtsTtfb),
191            "CLIENT_VIDEO_SUBSCRIBER_FREEZE_COUNT" => Some(Self::ClientVideoSubscriberFreezeCount),
192            "CLIENT_VIDEO_SUBSCRIBER_TOTAL_FREEZE_DURATION" => Some(Self::ClientVideoSubscriberTotalFreezeDuration),
193            "CLIENT_VIDEO_SUBSCRIBER_PAUSE_COUNT" => Some(Self::ClientVideoSubscriberPauseCount),
194            "CLIENT_VIDEO_SUBSCRIBER_TOTAL_PAUSES_DURATION" => Some(Self::ClientVideoSubscriberTotalPausesDuration),
195            "CLIENT_AUDIO_SUBSCRIBER_CONCEALED_SAMPLES" => Some(Self::ClientAudioSubscriberConcealedSamples),
196            "CLIENT_AUDIO_SUBSCRIBER_SILENT_CONCEALED_SAMPLES" => Some(Self::ClientAudioSubscriberSilentConcealedSamples),
197            "CLIENT_AUDIO_SUBSCRIBER_CONCEALMENT_EVENTS" => Some(Self::ClientAudioSubscriberConcealmentEvents),
198            "CLIENT_AUDIO_SUBSCRIBER_INTERRUPTION_COUNT" => Some(Self::ClientAudioSubscriberInterruptionCount),
199            "CLIENT_AUDIO_SUBSCRIBER_TOTAL_INTERRUPTION_DURATION" => Some(Self::ClientAudioSubscriberTotalInterruptionDuration),
200            "CLIENT_SUBSCRIBER_JITTER_BUFFER_DELAY" => Some(Self::ClientSubscriberJitterBufferDelay),
201            "CLIENT_SUBSCRIBER_JITTER_BUFFER_EMITTED_COUNT" => Some(Self::ClientSubscriberJitterBufferEmittedCount),
202            "CLIENT_VIDEO_PUBLISHER_QUALITY_LIMITATION_DURATION_BANDWIDTH" => Some(Self::ClientVideoPublisherQualityLimitationDurationBandwidth),
203            "CLIENT_VIDEO_PUBLISHER_QUALITY_LIMITATION_DURATION_CPU" => Some(Self::ClientVideoPublisherQualityLimitationDurationCpu),
204            "CLIENT_VIDEO_PUBLISHER_QUALITY_LIMITATION_DURATION_OTHER" => Some(Self::ClientVideoPublisherQualityLimitationDurationOther),
205            "PUBLISHER_RTT" => Some(Self::PublisherRtt),
206            "SERVER_MESH_RTT" => Some(Self::ServerMeshRtt),
207            "SUBSCRIBER_RTT" => Some(Self::SubscriberRtt),
208            "METRIC_LABEL_PREDEFINED_MAX_VALUE" => Some(Self::PredefinedMaxValue),
209            _ => None,
210        }
211    }
212}
213#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
214pub struct Pagination {
215    /// list entities which IDs are greater
216    #[prost(string, tag = "1")]
217    pub after_id: ::prost::alloc::string::String,
218    #[prost(int32, tag = "2")]
219    pub limit: i32,
220}
221#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
222pub struct TokenPagination {
223    #[prost(string, tag = "1")]
224    pub token: ::prost::alloc::string::String,
225}
226/// ListUpdate is used for updated APIs where 'repeated string' field is modified.
227#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
228pub struct ListUpdate {
229    /// set the field to a new list
230    #[prost(string, repeated, tag = "1")]
231    pub set: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
232    /// append items to a list, avoiding duplicates
233    #[prost(string, repeated, tag = "2")]
234    pub add: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
235    /// delete items from a list
236    #[prost(string, repeated, tag = "3")]
237    pub remove: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
238    /// sets the list to an empty list
239    #[prost(bool, tag = "4")]
240    pub clear: bool,
241}
242#[derive(Clone, PartialEq, ::prost::Message)]
243pub struct Room {
244    #[prost(string, tag = "1")]
245    pub sid: ::prost::alloc::string::String,
246    #[prost(string, tag = "2")]
247    pub name: ::prost::alloc::string::String,
248    #[prost(uint32, tag = "3")]
249    pub empty_timeout: u32,
250    #[prost(uint32, tag = "14")]
251    pub departure_timeout: u32,
252    #[prost(uint32, tag = "4")]
253    pub max_participants: u32,
254    #[prost(int64, tag = "5")]
255    pub creation_time: i64,
256    #[prost(int64, tag = "15")]
257    pub creation_time_ms: i64,
258    #[prost(string, tag = "6")]
259    pub turn_password: ::prost::alloc::string::String,
260    #[prost(message, repeated, tag = "7")]
261    pub enabled_codecs: ::prost::alloc::vec::Vec<Codec>,
262    #[prost(string, tag = "8")]
263    pub metadata: ::prost::alloc::string::String,
264    #[prost(uint32, tag = "9")]
265    pub num_participants: u32,
266    #[prost(uint32, tag = "11")]
267    pub num_publishers: u32,
268    #[prost(bool, tag = "10")]
269    pub active_recording: bool,
270    #[prost(message, optional, tag = "13")]
271    pub version: ::core::option::Option<TimedVersion>,
272}
273#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
274pub struct Codec {
275    #[prost(string, tag = "1")]
276    pub mime: ::prost::alloc::string::String,
277    #[prost(string, tag = "2")]
278    pub fmtp_line: ::prost::alloc::string::String,
279}
280#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
281pub struct PlayoutDelay {
282    #[prost(bool, tag = "1")]
283    pub enabled: bool,
284    #[prost(uint32, tag = "2")]
285    pub min: u32,
286    #[prost(uint32, tag = "3")]
287    pub max: u32,
288}
289#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
290pub struct ParticipantPermission {
291    /// allow participant to subscribe to other tracks in the room
292    #[prost(bool, tag = "1")]
293    pub can_subscribe: bool,
294    /// allow participant to publish new tracks to room
295    #[prost(bool, tag = "2")]
296    pub can_publish: bool,
297    /// allow participant to publish data
298    #[prost(bool, tag = "3")]
299    pub can_publish_data: bool,
300    /// sources that are allowed to be published
301    #[prost(enumeration = "TrackSource", repeated, tag = "9")]
302    pub can_publish_sources: ::prost::alloc::vec::Vec<i32>,
303    /// indicates that it's hidden to others
304    #[prost(bool, tag = "7")]
305    pub hidden: bool,
306    /// indicates it's a recorder instance
307    /// deprecated: use ParticipantInfo.kind instead
308    #[deprecated]
309    #[prost(bool, tag = "8")]
310    pub recorder: bool,
311    /// indicates that participant can update own metadata and attributes
312    #[prost(bool, tag = "10")]
313    pub can_update_metadata: bool,
314    /// indicates that participant is an agent
315    /// deprecated: use ParticipantInfo.kind instead
316    #[deprecated]
317    #[prost(bool, tag = "11")]
318    pub agent: bool,
319    /// if a participant can subscribe to metrics
320    #[prost(bool, tag = "12")]
321    pub can_subscribe_metrics: bool,
322    /// if a participant can manage an agent session via RemoteSession (control and access state)
323    #[prost(bool, tag = "13")]
324    pub can_manage_agent_session: bool,
325}
326#[derive(Clone, PartialEq, ::prost::Message)]
327pub struct ParticipantInfo {
328    #[prost(string, tag = "1")]
329    pub sid: ::prost::alloc::string::String,
330    #[prost(string, tag = "2")]
331    pub identity: ::prost::alloc::string::String,
332    #[prost(enumeration = "participant_info::State", tag = "3")]
333    pub state: i32,
334    #[prost(message, repeated, tag = "4")]
335    pub tracks: ::prost::alloc::vec::Vec<TrackInfo>,
336    #[prost(string, tag = "5")]
337    pub metadata: ::prost::alloc::string::String,
338    /// timestamp when participant joined room, in seconds
339    #[prost(int64, tag = "6")]
340    pub joined_at: i64,
341    /// timestamp when participant joined room, in milliseconds
342    #[prost(int64, tag = "17")]
343    pub joined_at_ms: i64,
344    #[prost(string, tag = "9")]
345    pub name: ::prost::alloc::string::String,
346    #[prost(uint32, tag = "10")]
347    pub version: u32,
348    #[prost(message, optional, tag = "11")]
349    pub permission: ::core::option::Option<ParticipantPermission>,
350    #[prost(string, tag = "12")]
351    pub region: ::prost::alloc::string::String,
352    /// indicates the participant has an active publisher connection
353    /// and can publish to the server
354    #[prost(bool, tag = "13")]
355    pub is_publisher: bool,
356    #[prost(enumeration = "participant_info::Kind", tag = "14")]
357    pub kind: i32,
358    #[prost(map = "string, string", tag = "15")]
359    pub attributes: ::std::collections::HashMap<::prost::alloc::string::String, ::prost::alloc::string::String>,
360    #[prost(enumeration = "DisconnectReason", tag = "16")]
361    pub disconnect_reason: i32,
362    #[prost(enumeration = "participant_info::KindDetail", repeated, tag = "18")]
363    pub kind_details: ::prost::alloc::vec::Vec<i32>,
364    #[prost(message, repeated, tag = "19")]
365    pub data_tracks: ::prost::alloc::vec::Vec<DataTrackInfo>,
366    /// protocol version used for client feature compatibility
367    #[prost(int32, tag = "20")]
368    pub client_protocol: i32,
369    /// capabilities the participant's client advertises, mirrored from ClientInfo.
370    /// Lets other participants perform client-side feature detection.
371    #[prost(enumeration = "client_info::Capability", repeated, tag = "21")]
372    pub capabilities: ::prost::alloc::vec::Vec<i32>,
373}
374/// Nested message and enum types in `ParticipantInfo`.
375pub mod participant_info {
376    #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
377    #[repr(i32)]
378    pub enum State {
379        /// websocket' connected, but not offered yet
380        Joining = 0,
381        /// server received client offer
382        Joined = 1,
383        /// ICE connectivity established
384        Active = 2,
385        /// WS disconnected
386        Disconnected = 3,
387    }
388    impl State {
389        /// String value of the enum field names used in the ProtoBuf definition.
390        ///
391        /// The values are not transformed in any way and thus are considered stable
392        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
393        pub fn as_str_name(&self) -> &'static str {
394            match self {
395                Self::Joining => "JOINING",
396                Self::Joined => "JOINED",
397                Self::Active => "ACTIVE",
398                Self::Disconnected => "DISCONNECTED",
399            }
400        }
401        /// Creates an enum from field names used in the ProtoBuf definition.
402        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
403            match value {
404                "JOINING" => Some(Self::Joining),
405                "JOINED" => Some(Self::Joined),
406                "ACTIVE" => Some(Self::Active),
407                "DISCONNECTED" => Some(Self::Disconnected),
408                _ => None,
409            }
410        }
411    }
412    #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
413    #[repr(i32)]
414    pub enum Kind {
415        /// standard participants, e.g. web clients
416        Standard = 0,
417        /// only ingests streams
418        Ingress = 1,
419        /// only consumes streams
420        Egress = 2,
421        /// SIP participants
422        Sip = 3,
423        /// LiveKit agents
424        Agent = 4,
425        /// Connectors participants
426        Connector = 7,
427        /// Bridge participants
428        ///
429        /// NEXT_ID: 9
430        Bridge = 8,
431    }
432    impl Kind {
433        /// String value of the enum field names used in the ProtoBuf definition.
434        ///
435        /// The values are not transformed in any way and thus are considered stable
436        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
437        pub fn as_str_name(&self) -> &'static str {
438            match self {
439                Self::Standard => "STANDARD",
440                Self::Ingress => "INGRESS",
441                Self::Egress => "EGRESS",
442                Self::Sip => "SIP",
443                Self::Agent => "AGENT",
444                Self::Connector => "CONNECTOR",
445                Self::Bridge => "BRIDGE",
446            }
447        }
448        /// Creates an enum from field names used in the ProtoBuf definition.
449        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
450            match value {
451                "STANDARD" => Some(Self::Standard),
452                "INGRESS" => Some(Self::Ingress),
453                "EGRESS" => Some(Self::Egress),
454                "SIP" => Some(Self::Sip),
455                "AGENT" => Some(Self::Agent),
456                "CONNECTOR" => Some(Self::Connector),
457                "BRIDGE" => Some(Self::Bridge),
458                _ => None,
459            }
460        }
461    }
462    #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
463    #[repr(i32)]
464    pub enum KindDetail {
465        CloudAgent = 0,
466        Forwarded = 1,
467        ConnectorWhatsapp = 2,
468        ConnectorTwilio = 3,
469        BridgeRtsp = 4,
470        /// NEXT_ID: 6
471        Simulation = 5,
472    }
473    impl KindDetail {
474        /// String value of the enum field names used in the ProtoBuf definition.
475        ///
476        /// The values are not transformed in any way and thus are considered stable
477        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
478        pub fn as_str_name(&self) -> &'static str {
479            match self {
480                Self::CloudAgent => "CLOUD_AGENT",
481                Self::Forwarded => "FORWARDED",
482                Self::ConnectorWhatsapp => "CONNECTOR_WHATSAPP",
483                Self::ConnectorTwilio => "CONNECTOR_TWILIO",
484                Self::BridgeRtsp => "BRIDGE_RTSP",
485                Self::Simulation => "SIMULATION",
486            }
487        }
488        /// Creates an enum from field names used in the ProtoBuf definition.
489        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
490            match value {
491                "CLOUD_AGENT" => Some(Self::CloudAgent),
492                "FORWARDED" => Some(Self::Forwarded),
493                "CONNECTOR_WHATSAPP" => Some(Self::ConnectorWhatsapp),
494                "CONNECTOR_TWILIO" => Some(Self::ConnectorTwilio),
495                "BRIDGE_RTSP" => Some(Self::BridgeRtsp),
496                "SIMULATION" => Some(Self::Simulation),
497                _ => None,
498            }
499        }
500    }
501}
502#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
503pub struct Encryption {
504}
505/// Nested message and enum types in `Encryption`.
506pub mod encryption {
507    #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
508    #[repr(i32)]
509    pub enum Type {
510        None = 0,
511        Gcm = 1,
512        Custom = 2,
513    }
514    impl Type {
515        /// String value of the enum field names used in the ProtoBuf definition.
516        ///
517        /// The values are not transformed in any way and thus are considered stable
518        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
519        pub fn as_str_name(&self) -> &'static str {
520            match self {
521                Self::None => "NONE",
522                Self::Gcm => "GCM",
523                Self::Custom => "CUSTOM",
524            }
525        }
526        /// Creates an enum from field names used in the ProtoBuf definition.
527        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
528            match value {
529                "NONE" => Some(Self::None),
530                "GCM" => Some(Self::Gcm),
531                "CUSTOM" => Some(Self::Custom),
532                _ => None,
533            }
534        }
535    }
536}
537#[derive(Clone, PartialEq, ::prost::Message)]
538pub struct SimulcastCodecInfo {
539    #[prost(string, tag = "1")]
540    pub mime_type: ::prost::alloc::string::String,
541    #[prost(string, tag = "2")]
542    pub mid: ::prost::alloc::string::String,
543    #[prost(string, tag = "3")]
544    pub cid: ::prost::alloc::string::String,
545    #[prost(message, repeated, tag = "4")]
546    pub layers: ::prost::alloc::vec::Vec<VideoLayer>,
547    #[prost(enumeration = "video_layer::Mode", tag = "5")]
548    pub video_layer_mode: i32,
549    /// cid (client side id for track) could be different between
550    /// signalling (AddTrackRequest) and SDP offer. This field
551    /// will be populated only if it is different to avoid
552    /// duplication and keep the representation concise.
553    #[prost(string, tag = "6")]
554    pub sdp_cid: ::prost::alloc::string::String,
555}
556#[derive(Clone, PartialEq, ::prost::Message)]
557pub struct TrackInfo {
558    #[prost(string, tag = "1")]
559    pub sid: ::prost::alloc::string::String,
560    #[prost(enumeration = "TrackType", tag = "2")]
561    pub r#type: i32,
562    #[prost(string, tag = "3")]
563    pub name: ::prost::alloc::string::String,
564    #[prost(bool, tag = "4")]
565    pub muted: bool,
566    /// original width of video (unset for audio)
567    /// clients may receive a lower resolution version with simulcast
568    #[prost(uint32, tag = "5")]
569    pub width: u32,
570    /// original height of video (unset for audio)
571    #[prost(uint32, tag = "6")]
572    pub height: u32,
573    /// true if track is simulcasted
574    ///
575    /// see `video_layer_mode` in `codecs`
576    #[deprecated]
577    #[prost(bool, tag = "7")]
578    pub simulcast: bool,
579    /// true if DTX (Discontinuous Transmission) is disabled for audio
580    ///
581    /// deprecated in favor of `audio_features`
582    #[deprecated]
583    #[prost(bool, tag = "8")]
584    pub disable_dtx: bool,
585    /// source of media
586    #[prost(enumeration = "TrackSource", tag = "9")]
587    pub source: i32,
588    /// see `codecs` for layers of individual codec
589    #[deprecated]
590    #[prost(message, repeated, tag = "10")]
591    pub layers: ::prost::alloc::vec::Vec<VideoLayer>,
592    /// mime type of codec
593    #[prost(string, tag = "11")]
594    pub mime_type: ::prost::alloc::string::String,
595    #[prost(string, tag = "12")]
596    pub mid: ::prost::alloc::string::String,
597    #[prost(message, repeated, tag = "13")]
598    pub codecs: ::prost::alloc::vec::Vec<SimulcastCodecInfo>,
599    /// deprecated in favor of `audio_features`
600    #[deprecated]
601    #[prost(bool, tag = "14")]
602    pub stereo: bool,
603    /// true if RED (Redundant Encoding) is disabled for audio
604    #[prost(bool, tag = "15")]
605    pub disable_red: bool,
606    #[prost(enumeration = "encryption::Type", tag = "16")]
607    pub encryption: i32,
608    #[prost(string, tag = "17")]
609    pub stream: ::prost::alloc::string::String,
610    #[prost(message, optional, tag = "18")]
611    pub version: ::core::option::Option<TimedVersion>,
612    #[prost(enumeration = "AudioTrackFeature", repeated, tag = "19")]
613    pub audio_features: ::prost::alloc::vec::Vec<i32>,
614    #[prost(enumeration = "BackupCodecPolicy", tag = "20")]
615    pub backup_codec_policy: i32,
616    #[prost(enumeration = "PacketTrailerFeature", repeated, tag = "21")]
617    pub packet_trailer_features: ::prost::alloc::vec::Vec<i32>,
618}
619#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
620pub struct DataTrackInfo {
621    /// Client-assigned, 16-bit identifier that will be attached to packets sent by the publisher.
622    #[prost(uint32, tag = "1")]
623    pub pub_handle: u32,
624    /// Server-assigned track identifier.
625    #[prost(string, tag = "2")]
626    pub sid: ::prost::alloc::string::String,
627    /// Human-readable identifier (e.g., `geoLocation`, `servoPosition.x`, etc.), unique per publisher.
628    #[prost(string, tag = "3")]
629    pub name: ::prost::alloc::string::String,
630    /// Method used for end-to-end encryption (E2EE) on packet payloads.
631    #[prost(enumeration = "encryption::Type", tag = "4")]
632    pub encryption: i32,
633    /// Encoding for frame payloads on this track. If unspecified, the track is untyped.
634    #[prost(message, optional, tag = "5")]
635    pub frame_encoding: ::core::option::Option<DataTrackFrameEncoding>,
636    /// ID of the schema used by frames on this track if the track is typed.
637    #[prost(message, optional, tag = "6")]
638    pub schema: ::core::option::Option<DataTrackSchemaId>,
639}
640/// Encoding for frame payloads.
641#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
642pub struct DataTrackFrameEncoding {
643    #[prost(oneof = "data_track_frame_encoding::Value", tags = "1, 2")]
644    pub value: ::core::option::Option<data_track_frame_encoding::Value>,
645}
646/// Nested message and enum types in `DataTrackFrameEncoding`.
647pub mod data_track_frame_encoding {
648    /// Well-known encoding for frame payloads.
649    ///
650    /// Mirrors the well-known message encodings from the MCAP spec:
651    /// <https://mcap.dev/spec/registry#message-encodings>
652    ///
653    #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
654    #[repr(i32)]
655    pub enum WellKnownFrameEncoding {
656        Unspecified = 0,
657        /// ROS 1: must be described by `ROS1_MSG` schema encoding.
658        Ros1 = 1,
659        /// CDR: must be described by `ROS2_MSG`, `ROS2_IDL`, or `OMG_IDL` schema encoding.
660        Cdr = 2,
661        /// Protocol Buffer: must be described by `PROTOBUF` schema encoding.
662        Protobuf = 3,
663        /// FlatBuffer: must be described by `FLATBUFFER` schema encoding.
664        Flatbuffer = 4,
665        /// CBOR: self-describing.
666        Cbor = 5,
667        /// MessagePack: self-describing.
668        Msgpack = 6,
669        /// JSON: self-describing or described by `JSON_SCHEMA` schema encoding.
670        Json = 7,
671    }
672    impl WellKnownFrameEncoding {
673        /// String value of the enum field names used in the ProtoBuf definition.
674        ///
675        /// The values are not transformed in any way and thus are considered stable
676        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
677        pub fn as_str_name(&self) -> &'static str {
678            match self {
679                Self::Unspecified => "WELL_KNOWN_FRAME_ENCODING_UNSPECIFIED",
680                Self::Ros1 => "WELL_KNOWN_FRAME_ENCODING_ROS1",
681                Self::Cdr => "WELL_KNOWN_FRAME_ENCODING_CDR",
682                Self::Protobuf => "WELL_KNOWN_FRAME_ENCODING_PROTOBUF",
683                Self::Flatbuffer => "WELL_KNOWN_FRAME_ENCODING_FLATBUFFER",
684                Self::Cbor => "WELL_KNOWN_FRAME_ENCODING_CBOR",
685                Self::Msgpack => "WELL_KNOWN_FRAME_ENCODING_MSGPACK",
686                Self::Json => "WELL_KNOWN_FRAME_ENCODING_JSON",
687            }
688        }
689        /// Creates an enum from field names used in the ProtoBuf definition.
690        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
691            match value {
692                "WELL_KNOWN_FRAME_ENCODING_UNSPECIFIED" => Some(Self::Unspecified),
693                "WELL_KNOWN_FRAME_ENCODING_ROS1" => Some(Self::Ros1),
694                "WELL_KNOWN_FRAME_ENCODING_CDR" => Some(Self::Cdr),
695                "WELL_KNOWN_FRAME_ENCODING_PROTOBUF" => Some(Self::Protobuf),
696                "WELL_KNOWN_FRAME_ENCODING_FLATBUFFER" => Some(Self::Flatbuffer),
697                "WELL_KNOWN_FRAME_ENCODING_CBOR" => Some(Self::Cbor),
698                "WELL_KNOWN_FRAME_ENCODING_MSGPACK" => Some(Self::Msgpack),
699                "WELL_KNOWN_FRAME_ENCODING_JSON" => Some(Self::Json),
700                _ => None,
701            }
702        }
703    }
704    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Oneof)]
705    pub enum Value {
706        #[prost(enumeration = "WellKnownFrameEncoding", tag = "1")]
707        WellKnown(i32),
708        /// Identifier of a custom encoding not covered by the well-known cases.
709        /// This must be non-empty and no longer than 32 characters.
710        #[prost(string, tag = "2")]
711        Custom(::prost::alloc::string::String),
712    }
713}
714/// Encoding for schema definition.
715#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
716pub struct DataTrackSchemaEncoding {
717    #[prost(oneof = "data_track_schema_encoding::Value", tags = "1, 2")]
718    pub value: ::core::option::Option<data_track_schema_encoding::Value>,
719}
720/// Nested message and enum types in `DataTrackSchemaEncoding`.
721pub mod data_track_schema_encoding {
722    /// Well-known encoding for schema definition.
723    ///
724    /// Mirrors the well-known schema encodings from the MCAP spec:
725    /// <https://mcap.dev/spec/registry#schema-encodings>
726    ///
727    #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
728    #[repr(i32)]
729    pub enum WellKnownSchemaEncoding {
730        Unspecified = 0,
731        /// Protocol Buffer IDL: describes `PROTOBUF` frame encoding.
732        Protobuf = 1,
733        /// FlatBuffer IDL: describes `FLATBUFFER` frame encoding.
734        Flatbuffer = 2,
735        /// ROS 1 Message: describes `ROS1` frame encoding.
736        Ros1Msg = 3,
737        /// ROS 2 Message: describes `CDR` frame encoding.
738        Ros2Msg = 4,
739        /// ROS 2 IDL: describes `CDR` frame encoding.
740        Ros2Idl = 5,
741        /// OMG IDL: describes `CDR` frame encoding.
742        OmgIdl = 6,
743        /// JSON Schema: describes `JSON` frame encoding.
744        JsonSchema = 7,
745    }
746    impl WellKnownSchemaEncoding {
747        /// String value of the enum field names used in the ProtoBuf definition.
748        ///
749        /// The values are not transformed in any way and thus are considered stable
750        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
751        pub fn as_str_name(&self) -> &'static str {
752            match self {
753                Self::Unspecified => "WELL_KNOWN_SCHEMA_ENCODING_UNSPECIFIED",
754                Self::Protobuf => "WELL_KNOWN_SCHEMA_ENCODING_PROTOBUF",
755                Self::Flatbuffer => "WELL_KNOWN_SCHEMA_ENCODING_FLATBUFFER",
756                Self::Ros1Msg => "WELL_KNOWN_SCHEMA_ENCODING_ROS1_MSG",
757                Self::Ros2Msg => "WELL_KNOWN_SCHEMA_ENCODING_ROS2_MSG",
758                Self::Ros2Idl => "WELL_KNOWN_SCHEMA_ENCODING_ROS2_IDL",
759                Self::OmgIdl => "WELL_KNOWN_SCHEMA_ENCODING_OMG_IDL",
760                Self::JsonSchema => "WELL_KNOWN_SCHEMA_ENCODING_JSON_SCHEMA",
761            }
762        }
763        /// Creates an enum from field names used in the ProtoBuf definition.
764        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
765            match value {
766                "WELL_KNOWN_SCHEMA_ENCODING_UNSPECIFIED" => Some(Self::Unspecified),
767                "WELL_KNOWN_SCHEMA_ENCODING_PROTOBUF" => Some(Self::Protobuf),
768                "WELL_KNOWN_SCHEMA_ENCODING_FLATBUFFER" => Some(Self::Flatbuffer),
769                "WELL_KNOWN_SCHEMA_ENCODING_ROS1_MSG" => Some(Self::Ros1Msg),
770                "WELL_KNOWN_SCHEMA_ENCODING_ROS2_MSG" => Some(Self::Ros2Msg),
771                "WELL_KNOWN_SCHEMA_ENCODING_ROS2_IDL" => Some(Self::Ros2Idl),
772                "WELL_KNOWN_SCHEMA_ENCODING_OMG_IDL" => Some(Self::OmgIdl),
773                "WELL_KNOWN_SCHEMA_ENCODING_JSON_SCHEMA" => Some(Self::JsonSchema),
774                _ => None,
775            }
776        }
777    }
778    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Oneof)]
779    pub enum Value {
780        #[prost(enumeration = "WellKnownSchemaEncoding", tag = "1")]
781        WellKnown(i32),
782        /// Identifier of a custom encoding not covered by the well-known cases.
783        /// This must be non-empty and no longer than 32 characters.
784        #[prost(string, tag = "2")]
785        Custom(::prost::alloc::string::String),
786    }
787}
788/// Identifier for a data track schema.
789///
790/// Schemas with the same name but different encodings are distinct.
791///
792#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
793pub struct DataTrackSchemaId {
794    /// This must be non-empty and no longer than 256 characters.
795    #[prost(string, tag = "1")]
796    pub name: ::prost::alloc::string::String,
797    #[prost(message, optional, tag = "2")]
798    pub encoding: ::core::option::Option<DataTrackSchemaEncoding>,
799}
800#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
801pub struct DataTrackExtensionParticipantSid {
802    #[prost(enumeration = "DataTrackExtensionId", tag = "1")]
803    pub id: i32,
804    #[prost(string, tag = "2")]
805    pub participant_sid: ::prost::alloc::string::String,
806}
807#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
808pub struct DataTrackSubscriptionOptions {
809    /// Rate in frames per second (FPS) the subscriber wants to receive frames at.
810    /// If omitted, the subscriber defaults to the publisher's fps
811    #[prost(uint32, optional, tag = "1")]
812    pub target_fps: ::core::option::Option<u32>,
813}
814/// Key used to uniquely identify a data blob for storage and retrieval.
815#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
816pub struct DataBlobKey {
817    #[prost(oneof = "data_blob_key::Key", tags = "1, 2")]
818    pub key: ::core::option::Option<data_blob_key::Key>,
819}
820/// Nested message and enum types in `DataBlobKey`.
821pub mod data_blob_key {
822    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Oneof)]
823    pub enum Key {
824        /// Generic string key, blob contains arbitrary data.
825        #[prost(string, tag = "1")]
826        Generic(::prost::alloc::string::String),
827        /// Data track schema identifier, blob contains schema definition.
828        #[prost(message, tag = "2")]
829        SchemaId(super::DataTrackSchemaId),
830    }
831}
832/// A blob of data stored in a room identified by a unique key.
833#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
834pub struct DataBlob {
835    /// Unique key the data blob is identified by.
836    #[prost(message, optional, tag = "1")]
837    pub key: ::core::option::Option<DataBlobKey>,
838    /// Contents of the data blob. This must not exceed 50 KB.
839    #[prost(bytes = "vec", tag = "2")]
840    pub contents: ::prost::alloc::vec::Vec<u8>,
841}
842/// provide information about available spatial layers
843#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
844pub struct VideoLayer {
845    /// for tracks with a single layer, this should be HIGH
846    #[prost(enumeration = "VideoQuality", tag = "1")]
847    pub quality: i32,
848    #[prost(uint32, tag = "2")]
849    pub width: u32,
850    #[prost(uint32, tag = "3")]
851    pub height: u32,
852    /// target bitrate in bit per second (bps), server will measure actual
853    #[prost(uint32, tag = "4")]
854    pub bitrate: u32,
855    #[prost(uint32, tag = "5")]
856    pub ssrc: u32,
857    #[prost(int32, tag = "6")]
858    pub spatial_layer: i32,
859    #[prost(string, tag = "7")]
860    pub rid: ::prost::alloc::string::String,
861    #[prost(uint32, tag = "8")]
862    pub repair_ssrc: u32,
863}
864/// Nested message and enum types in `VideoLayer`.
865pub mod video_layer {
866    #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
867    #[repr(i32)]
868    pub enum Mode {
869        Unused = 0,
870        OneSpatialLayerPerStream = 1,
871        MultipleSpatialLayersPerStream = 2,
872        OneSpatialLayerPerStreamIncompleteRtcpSr = 3,
873    }
874    impl Mode {
875        /// String value of the enum field names used in the ProtoBuf definition.
876        ///
877        /// The values are not transformed in any way and thus are considered stable
878        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
879        pub fn as_str_name(&self) -> &'static str {
880            match self {
881                Self::Unused => "MODE_UNUSED",
882                Self::OneSpatialLayerPerStream => "ONE_SPATIAL_LAYER_PER_STREAM",
883                Self::MultipleSpatialLayersPerStream => "MULTIPLE_SPATIAL_LAYERS_PER_STREAM",
884                Self::OneSpatialLayerPerStreamIncompleteRtcpSr => "ONE_SPATIAL_LAYER_PER_STREAM_INCOMPLETE_RTCP_SR",
885            }
886        }
887        /// Creates an enum from field names used in the ProtoBuf definition.
888        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
889            match value {
890                "MODE_UNUSED" => Some(Self::Unused),
891                "ONE_SPATIAL_LAYER_PER_STREAM" => Some(Self::OneSpatialLayerPerStream),
892                "MULTIPLE_SPATIAL_LAYERS_PER_STREAM" => Some(Self::MultipleSpatialLayersPerStream),
893                "ONE_SPATIAL_LAYER_PER_STREAM_INCOMPLETE_RTCP_SR" => Some(Self::OneSpatialLayerPerStreamIncompleteRtcpSr),
894                _ => None,
895            }
896        }
897    }
898}
899/// new DataPacket API
900#[derive(Clone, PartialEq, ::prost::Message)]
901pub struct DataPacket {
902    #[deprecated]
903    #[prost(enumeration = "data_packet::Kind", tag = "1")]
904    pub kind: i32,
905    /// participant identity of user that sent the message
906    #[prost(string, tag = "4")]
907    pub participant_identity: ::prost::alloc::string::String,
908    /// identities of participants who will receive the message (sent to all by default)
909    #[prost(string, repeated, tag = "5")]
910    pub destination_identities: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
911    /// sequence number of reliable packet
912    #[prost(uint32, tag = "16")]
913    pub sequence: u32,
914    /// sid of the user that sent the message
915    #[prost(string, tag = "17")]
916    pub participant_sid: ::prost::alloc::string::String,
917    #[prost(oneof = "data_packet::Value", tags = "2, 3, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 18")]
918    pub value: ::core::option::Option<data_packet::Value>,
919}
920/// Nested message and enum types in `DataPacket`.
921pub mod data_packet {
922    #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
923    #[repr(i32)]
924    pub enum Kind {
925        Reliable = 0,
926        Lossy = 1,
927    }
928    impl Kind {
929        /// String value of the enum field names used in the ProtoBuf definition.
930        ///
931        /// The values are not transformed in any way and thus are considered stable
932        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
933        pub fn as_str_name(&self) -> &'static str {
934            match self {
935                Self::Reliable => "RELIABLE",
936                Self::Lossy => "LOSSY",
937            }
938        }
939        /// Creates an enum from field names used in the ProtoBuf definition.
940        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
941            match value {
942                "RELIABLE" => Some(Self::Reliable),
943                "LOSSY" => Some(Self::Lossy),
944                _ => None,
945            }
946        }
947    }
948    #[derive(Clone, PartialEq, ::prost::Oneof)]
949    pub enum Value {
950        #[prost(message, tag = "2")]
951        User(super::UserPacket),
952        #[deprecated]
953        #[prost(message, tag = "3")]
954        Speaker(super::ActiveSpeakerUpdate),
955        #[prost(message, tag = "6")]
956        SipDtmf(super::SipDtmf),
957        #[prost(message, tag = "7")]
958        Transcription(super::Transcription),
959        #[prost(message, tag = "8")]
960        Metrics(super::MetricsBatch),
961        #[prost(message, tag = "9")]
962        ChatMessage(super::ChatMessage),
963        #[prost(message, tag = "10")]
964        RpcRequest(super::RpcRequest),
965        #[prost(message, tag = "11")]
966        RpcAck(super::RpcAck),
967        #[prost(message, tag = "12")]
968        RpcResponse(super::RpcResponse),
969        #[prost(message, tag = "13")]
970        StreamHeader(super::data_stream::Header),
971        #[prost(message, tag = "14")]
972        StreamChunk(super::data_stream::Chunk),
973        #[prost(message, tag = "15")]
974        StreamTrailer(super::data_stream::Trailer),
975        #[prost(message, tag = "18")]
976        EncryptedPacket(super::EncryptedPacket),
977    }
978}
979#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
980pub struct EncryptedPacket {
981    #[prost(enumeration = "encryption::Type", tag = "1")]
982    pub encryption_type: i32,
983    #[prost(bytes = "vec", tag = "2")]
984    pub iv: ::prost::alloc::vec::Vec<u8>,
985    #[prost(uint32, tag = "3")]
986    pub key_index: u32,
987    /// This is an encrypted EncryptedPacketPayload message representation
988    #[prost(bytes = "vec", tag = "4")]
989    pub encrypted_value: ::prost::alloc::vec::Vec<u8>,
990}
991#[derive(Clone, PartialEq, ::prost::Message)]
992pub struct EncryptedPacketPayload {
993    #[prost(oneof = "encrypted_packet_payload::Value", tags = "1, 3, 4, 5, 6, 7, 8, 9")]
994    pub value: ::core::option::Option<encrypted_packet_payload::Value>,
995}
996/// Nested message and enum types in `EncryptedPacketPayload`.
997pub mod encrypted_packet_payload {
998    #[derive(Clone, PartialEq, ::prost::Oneof)]
999    pub enum Value {
1000        #[prost(message, tag = "1")]
1001        User(super::UserPacket),
1002        #[prost(message, tag = "3")]
1003        ChatMessage(super::ChatMessage),
1004        #[prost(message, tag = "4")]
1005        RpcRequest(super::RpcRequest),
1006        #[prost(message, tag = "5")]
1007        RpcAck(super::RpcAck),
1008        #[prost(message, tag = "6")]
1009        RpcResponse(super::RpcResponse),
1010        #[prost(message, tag = "7")]
1011        StreamHeader(super::data_stream::Header),
1012        #[prost(message, tag = "8")]
1013        StreamChunk(super::data_stream::Chunk),
1014        #[prost(message, tag = "9")]
1015        StreamTrailer(super::data_stream::Trailer),
1016    }
1017}
1018#[derive(Clone, PartialEq, ::prost::Message)]
1019pub struct ActiveSpeakerUpdate {
1020    #[prost(message, repeated, tag = "1")]
1021    pub speakers: ::prost::alloc::vec::Vec<SpeakerInfo>,
1022}
1023#[derive(Clone, PartialEq, ::prost::Message)]
1024pub struct SpeakerInfo {
1025    #[prost(string, tag = "1")]
1026    pub sid: ::prost::alloc::string::String,
1027    /// audio level, 0-1.0, 1 is loudest
1028    #[prost(float, tag = "2")]
1029    pub level: f32,
1030    /// true if speaker is currently active
1031    #[prost(bool, tag = "3")]
1032    pub active: bool,
1033}
1034#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
1035pub struct UserPacket {
1036    /// participant ID of user that sent the message
1037    #[deprecated]
1038    #[prost(string, tag = "1")]
1039    pub participant_sid: ::prost::alloc::string::String,
1040    #[deprecated]
1041    #[prost(string, tag = "5")]
1042    pub participant_identity: ::prost::alloc::string::String,
1043    /// user defined payload
1044    #[prost(bytes = "vec", tag = "2")]
1045    pub payload: ::prost::alloc::vec::Vec<u8>,
1046    /// the ID of the participants who will receive the message (sent to all by default)
1047    #[deprecated]
1048    #[prost(string, repeated, tag = "3")]
1049    pub destination_sids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1050    /// identities of participants who will receive the message (sent to all by default)
1051    #[deprecated]
1052    #[prost(string, repeated, tag = "6")]
1053    pub destination_identities: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1054    /// topic under which the message was published
1055    #[prost(string, optional, tag = "4")]
1056    pub topic: ::core::option::Option<::prost::alloc::string::String>,
1057    /// Unique ID to identify the message
1058    #[prost(string, optional, tag = "8")]
1059    pub id: ::core::option::Option<::prost::alloc::string::String>,
1060    /// start and end time allow relating the message to specific media time
1061    #[prost(uint64, optional, tag = "9")]
1062    pub start_time: ::core::option::Option<u64>,
1063    #[prost(uint64, optional, tag = "10")]
1064    pub end_time: ::core::option::Option<u64>,
1065    /// added by SDK to enable de-duping of messages, for INTERNAL USE ONLY
1066    #[prost(bytes = "vec", tag = "11")]
1067    pub nonce: ::prost::alloc::vec::Vec<u8>,
1068}
1069#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
1070pub struct SipDtmf {
1071    #[prost(uint32, tag = "3")]
1072    pub code: u32,
1073    #[prost(string, tag = "4")]
1074    pub digit: ::prost::alloc::string::String,
1075}
1076#[derive(Clone, PartialEq, ::prost::Message)]
1077pub struct Transcription {
1078    /// Participant that got its speech transcribed
1079    #[prost(string, tag = "2")]
1080    pub transcribed_participant_identity: ::prost::alloc::string::String,
1081    #[prost(string, tag = "3")]
1082    pub track_id: ::prost::alloc::string::String,
1083    #[prost(message, repeated, tag = "4")]
1084    pub segments: ::prost::alloc::vec::Vec<TranscriptionSegment>,
1085}
1086#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
1087pub struct TranscriptionSegment {
1088    #[prost(string, tag = "1")]
1089    pub id: ::prost::alloc::string::String,
1090    #[prost(string, tag = "2")]
1091    pub text: ::prost::alloc::string::String,
1092    #[prost(uint64, tag = "3")]
1093    pub start_time: u64,
1094    #[prost(uint64, tag = "4")]
1095    pub end_time: u64,
1096    #[prost(bool, tag = "5")]
1097    pub r#final: bool,
1098    #[prost(string, tag = "6")]
1099    pub language: ::prost::alloc::string::String,
1100}
1101#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
1102pub struct ChatMessage {
1103    /// uuid
1104    #[prost(string, tag = "1")]
1105    pub id: ::prost::alloc::string::String,
1106    #[prost(int64, tag = "2")]
1107    pub timestamp: i64,
1108    /// populated only if the intent is to edit/update an existing message
1109    #[prost(int64, optional, tag = "3")]
1110    pub edit_timestamp: ::core::option::Option<i64>,
1111    #[prost(string, tag = "4")]
1112    pub message: ::prost::alloc::string::String,
1113    /// true to remove message
1114    #[prost(bool, tag = "5")]
1115    pub deleted: bool,
1116    /// true if the chat message has been generated by an agent from a participant's audio transcription
1117    #[prost(bool, tag = "6")]
1118    pub generated: bool,
1119}
1120#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
1121pub struct RpcRequest {
1122    #[prost(string, tag = "1")]
1123    pub id: ::prost::alloc::string::String,
1124    #[prost(string, tag = "2")]
1125    pub method: ::prost::alloc::string::String,
1126    #[prost(string, tag = "3")]
1127    pub payload: ::prost::alloc::string::String,
1128    #[prost(uint32, tag = "4")]
1129    pub response_timeout_ms: u32,
1130    #[prost(uint32, tag = "5")]
1131    pub version: u32,
1132    /// Compressed payload data. When set, this field is used instead of `payload`.
1133    #[prost(bytes = "vec", tag = "6")]
1134    pub compressed_payload: ::prost::alloc::vec::Vec<u8>,
1135}
1136#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
1137pub struct RpcAck {
1138    #[prost(string, tag = "1")]
1139    pub request_id: ::prost::alloc::string::String,
1140}
1141#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
1142pub struct RpcResponse {
1143    #[prost(string, tag = "1")]
1144    pub request_id: ::prost::alloc::string::String,
1145    #[prost(oneof = "rpc_response::Value", tags = "2, 3, 4")]
1146    pub value: ::core::option::Option<rpc_response::Value>,
1147}
1148/// Nested message and enum types in `RpcResponse`.
1149pub mod rpc_response {
1150    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Oneof)]
1151    pub enum Value {
1152        #[prost(string, tag = "2")]
1153        Payload(::prost::alloc::string::String),
1154        #[prost(message, tag = "3")]
1155        Error(super::RpcError),
1156        /// Compressed payload data. When set, this field is used instead of `payload`.
1157        #[prost(bytes, tag = "4")]
1158        CompressedPayload(::prost::alloc::vec::Vec<u8>),
1159    }
1160}
1161#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
1162pub struct RpcError {
1163    #[prost(uint32, tag = "1")]
1164    pub code: u32,
1165    #[prost(string, tag = "2")]
1166    pub message: ::prost::alloc::string::String,
1167    #[prost(string, tag = "3")]
1168    pub data: ::prost::alloc::string::String,
1169}
1170#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
1171pub struct ParticipantTracks {
1172    /// participant ID of participant to whom the tracks belong
1173    #[prost(string, tag = "1")]
1174    pub participant_sid: ::prost::alloc::string::String,
1175    #[prost(string, repeated, tag = "2")]
1176    pub track_sids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1177}
1178/// details about the server
1179#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
1180pub struct ServerInfo {
1181    #[prost(enumeration = "server_info::Edition", tag = "1")]
1182    pub edition: i32,
1183    #[prost(string, tag = "2")]
1184    pub version: ::prost::alloc::string::String,
1185    #[prost(int32, tag = "3")]
1186    pub protocol: i32,
1187    #[prost(string, tag = "4")]
1188    pub region: ::prost::alloc::string::String,
1189    #[prost(string, tag = "5")]
1190    pub node_id: ::prost::alloc::string::String,
1191    /// additional debugging information. sent only if server is in development mode
1192    #[prost(string, tag = "6")]
1193    pub debug_info: ::prost::alloc::string::String,
1194    #[prost(int32, tag = "7")]
1195    pub agent_protocol: i32,
1196}
1197/// Nested message and enum types in `ServerInfo`.
1198pub mod server_info {
1199    #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
1200    #[repr(i32)]
1201    pub enum Edition {
1202        Standard = 0,
1203        Cloud = 1,
1204    }
1205    impl Edition {
1206        /// String value of the enum field names used in the ProtoBuf definition.
1207        ///
1208        /// The values are not transformed in any way and thus are considered stable
1209        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1210        pub fn as_str_name(&self) -> &'static str {
1211            match self {
1212                Self::Standard => "Standard",
1213                Self::Cloud => "Cloud",
1214            }
1215        }
1216        /// Creates an enum from field names used in the ProtoBuf definition.
1217        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1218            match value {
1219                "Standard" => Some(Self::Standard),
1220                "Cloud" => Some(Self::Cloud),
1221                _ => None,
1222            }
1223        }
1224    }
1225}
1226/// details about the client
1227#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
1228pub struct ClientInfo {
1229    #[prost(enumeration = "client_info::Sdk", tag = "1")]
1230    pub sdk: i32,
1231    #[prost(string, tag = "2")]
1232    pub version: ::prost::alloc::string::String,
1233    #[prost(int32, tag = "3")]
1234    pub protocol: i32,
1235    #[prost(string, tag = "4")]
1236    pub os: ::prost::alloc::string::String,
1237    #[prost(string, tag = "5")]
1238    pub os_version: ::prost::alloc::string::String,
1239    #[prost(string, tag = "6")]
1240    pub device_model: ::prost::alloc::string::String,
1241    #[prost(string, tag = "7")]
1242    pub browser: ::prost::alloc::string::String,
1243    #[prost(string, tag = "8")]
1244    pub browser_version: ::prost::alloc::string::String,
1245    #[prost(string, tag = "9")]
1246    pub address: ::prost::alloc::string::String,
1247    /// wifi, wired, cellular, vpn, empty if not known
1248    #[prost(string, tag = "10")]
1249    pub network: ::prost::alloc::string::String,
1250    /// comma separated list of additional LiveKit SDKs in use of this client, with versions
1251    /// e.g. "components-js:1.2.3,track-processors-js:1.2.3"
1252    #[prost(string, tag = "11")]
1253    pub other_sdks: ::prost::alloc::string::String,
1254    /// client protocol version
1255    #[prost(int32, tag = "12")]
1256    pub client_protocol: i32,
1257    /// capabilities the client advertises. Populated automatically by each SDK;
1258    /// not a user-configurable setting.
1259    #[prost(enumeration = "client_info::Capability", repeated, tag = "13")]
1260    pub capabilities: ::prost::alloc::vec::Vec<i32>,
1261}
1262/// Nested message and enum types in `ClientInfo`.
1263pub mod client_info {
1264    #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
1265    #[repr(i32)]
1266    pub enum Sdk {
1267        Unknown = 0,
1268        Js = 1,
1269        Swift = 2,
1270        Android = 3,
1271        Flutter = 4,
1272        Go = 5,
1273        Unity = 6,
1274        ReactNative = 7,
1275        Rust = 8,
1276        Python = 9,
1277        Cpp = 10,
1278        UnityWeb = 11,
1279        Node = 12,
1280        Unreal = 13,
1281        Esp32 = 14,
1282    }
1283    impl Sdk {
1284        /// String value of the enum field names used in the ProtoBuf definition.
1285        ///
1286        /// The values are not transformed in any way and thus are considered stable
1287        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1288        pub fn as_str_name(&self) -> &'static str {
1289            match self {
1290                Self::Unknown => "UNKNOWN",
1291                Self::Js => "JS",
1292                Self::Swift => "SWIFT",
1293                Self::Android => "ANDROID",
1294                Self::Flutter => "FLUTTER",
1295                Self::Go => "GO",
1296                Self::Unity => "UNITY",
1297                Self::ReactNative => "REACT_NATIVE",
1298                Self::Rust => "RUST",
1299                Self::Python => "PYTHON",
1300                Self::Cpp => "CPP",
1301                Self::UnityWeb => "UNITY_WEB",
1302                Self::Node => "NODE",
1303                Self::Unreal => "UNREAL",
1304                Self::Esp32 => "ESP32",
1305            }
1306        }
1307        /// Creates an enum from field names used in the ProtoBuf definition.
1308        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1309            match value {
1310                "UNKNOWN" => Some(Self::Unknown),
1311                "JS" => Some(Self::Js),
1312                "SWIFT" => Some(Self::Swift),
1313                "ANDROID" => Some(Self::Android),
1314                "FLUTTER" => Some(Self::Flutter),
1315                "GO" => Some(Self::Go),
1316                "UNITY" => Some(Self::Unity),
1317                "REACT_NATIVE" => Some(Self::ReactNative),
1318                "RUST" => Some(Self::Rust),
1319                "PYTHON" => Some(Self::Python),
1320                "CPP" => Some(Self::Cpp),
1321                "UNITY_WEB" => Some(Self::UnityWeb),
1322                "NODE" => Some(Self::Node),
1323                "UNREAL" => Some(Self::Unreal),
1324                "ESP32" => Some(Self::Esp32),
1325                _ => None,
1326            }
1327        }
1328    }
1329    /// Optional capabilities advertised by the client at connect time. The SFU
1330    /// uses these flags to decide whether to enable features that require
1331    /// client-side support (e.g. passing RTP packet trailers through to the
1332    /// subscriber instead of stripping them).
1333    #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
1334    #[repr(i32)]
1335    pub enum Capability {
1336        CapUnused = 0,
1337        CapPacketTrailer = 1,
1338        CapCompressionDeflateRaw = 2,
1339    }
1340    impl Capability {
1341        /// String value of the enum field names used in the ProtoBuf definition.
1342        ///
1343        /// The values are not transformed in any way and thus are considered stable
1344        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1345        pub fn as_str_name(&self) -> &'static str {
1346            match self {
1347                Self::CapUnused => "CAP_UNUSED",
1348                Self::CapPacketTrailer => "CAP_PACKET_TRAILER",
1349                Self::CapCompressionDeflateRaw => "CAP_COMPRESSION_DEFLATE_RAW",
1350            }
1351        }
1352        /// Creates an enum from field names used in the ProtoBuf definition.
1353        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1354            match value {
1355                "CAP_UNUSED" => Some(Self::CapUnused),
1356                "CAP_PACKET_TRAILER" => Some(Self::CapPacketTrailer),
1357                "CAP_COMPRESSION_DEFLATE_RAW" => Some(Self::CapCompressionDeflateRaw),
1358                _ => None,
1359            }
1360        }
1361    }
1362}
1363/// server provided client configuration
1364#[derive(Clone, PartialEq, ::prost::Message)]
1365pub struct ClientConfiguration {
1366    #[prost(message, optional, tag = "1")]
1367    pub video: ::core::option::Option<VideoConfiguration>,
1368    #[prost(message, optional, tag = "2")]
1369    pub screen: ::core::option::Option<VideoConfiguration>,
1370    #[prost(enumeration = "ClientConfigSetting", tag = "3")]
1371    pub resume_connection: i32,
1372    #[prost(message, optional, tag = "4")]
1373    pub disabled_codecs: ::core::option::Option<DisabledCodecs>,
1374    #[prost(enumeration = "ClientConfigSetting", tag = "5")]
1375    pub force_relay: i32,
1376}
1377#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
1378pub struct VideoConfiguration {
1379    #[prost(enumeration = "ClientConfigSetting", tag = "1")]
1380    pub hardware_encoder: i32,
1381}
1382#[derive(Clone, PartialEq, ::prost::Message)]
1383pub struct DisabledCodecs {
1384    /// disabled for both publish and subscribe
1385    #[prost(message, repeated, tag = "1")]
1386    pub codecs: ::prost::alloc::vec::Vec<Codec>,
1387    /// only disable for publish
1388    #[prost(message, repeated, tag = "2")]
1389    pub publish: ::prost::alloc::vec::Vec<Codec>,
1390}
1391#[derive(Clone, Copy, PartialEq, ::prost::Message)]
1392pub struct RtpDrift {
1393    #[prost(message, optional, tag = "1")]
1394    pub start_time: ::core::option::Option<::pbjson_types::Timestamp>,
1395    #[prost(message, optional, tag = "2")]
1396    pub end_time: ::core::option::Option<::pbjson_types::Timestamp>,
1397    #[prost(double, tag = "3")]
1398    pub duration: f64,
1399    #[prost(uint64, tag = "4")]
1400    pub start_timestamp: u64,
1401    #[prost(uint64, tag = "5")]
1402    pub end_timestamp: u64,
1403    #[prost(uint64, tag = "6")]
1404    pub rtp_clock_ticks: u64,
1405    #[prost(int64, tag = "7")]
1406    pub drift_samples: i64,
1407    #[prost(double, tag = "8")]
1408    pub drift_ms: f64,
1409    #[prost(double, tag = "9")]
1410    pub clock_rate: f64,
1411}
1412#[derive(Clone, PartialEq, ::prost::Message)]
1413pub struct RtpStats {
1414    #[prost(message, optional, tag = "1")]
1415    pub start_time: ::core::option::Option<::pbjson_types::Timestamp>,
1416    #[prost(message, optional, tag = "2")]
1417    pub end_time: ::core::option::Option<::pbjson_types::Timestamp>,
1418    #[prost(double, tag = "3")]
1419    pub duration: f64,
1420    #[prost(uint32, tag = "4")]
1421    pub packets: u32,
1422    #[prost(double, tag = "5")]
1423    pub packet_rate: f64,
1424    #[prost(uint64, tag = "6")]
1425    pub bytes: u64,
1426    #[prost(uint64, tag = "39")]
1427    pub header_bytes: u64,
1428    #[prost(double, tag = "7")]
1429    pub bitrate: f64,
1430    #[prost(uint32, tag = "8")]
1431    pub packets_lost: u32,
1432    #[prost(double, tag = "9")]
1433    pub packet_loss_rate: f64,
1434    #[prost(float, tag = "10")]
1435    pub packet_loss_percentage: f32,
1436    #[prost(uint32, tag = "11")]
1437    pub packets_duplicate: u32,
1438    #[prost(double, tag = "12")]
1439    pub packet_duplicate_rate: f64,
1440    #[prost(uint64, tag = "13")]
1441    pub bytes_duplicate: u64,
1442    #[prost(uint64, tag = "40")]
1443    pub header_bytes_duplicate: u64,
1444    #[prost(double, tag = "14")]
1445    pub bitrate_duplicate: f64,
1446    #[prost(uint32, tag = "15")]
1447    pub packets_padding: u32,
1448    #[prost(double, tag = "16")]
1449    pub packet_padding_rate: f64,
1450    #[prost(uint64, tag = "17")]
1451    pub bytes_padding: u64,
1452    #[prost(uint64, tag = "41")]
1453    pub header_bytes_padding: u64,
1454    #[prost(double, tag = "18")]
1455    pub bitrate_padding: f64,
1456    #[prost(uint32, tag = "19")]
1457    pub packets_out_of_order: u32,
1458    #[prost(uint32, tag = "20")]
1459    pub frames: u32,
1460    #[prost(double, tag = "21")]
1461    pub frame_rate: f64,
1462    #[prost(double, tag = "22")]
1463    pub jitter_current: f64,
1464    #[prost(double, tag = "23")]
1465    pub jitter_max: f64,
1466    #[prost(map = "int32, uint32", tag = "24")]
1467    pub gap_histogram: ::std::collections::HashMap<i32, u32>,
1468    #[prost(uint32, tag = "25")]
1469    pub nacks: u32,
1470    #[prost(uint32, tag = "37")]
1471    pub nack_acks: u32,
1472    #[prost(uint32, tag = "26")]
1473    pub nack_misses: u32,
1474    #[prost(uint32, tag = "38")]
1475    pub nack_repeated: u32,
1476    #[prost(uint32, tag = "27")]
1477    pub plis: u32,
1478    #[prost(message, optional, tag = "28")]
1479    pub last_pli: ::core::option::Option<::pbjson_types::Timestamp>,
1480    #[prost(uint32, tag = "29")]
1481    pub firs: u32,
1482    #[prost(message, optional, tag = "30")]
1483    pub last_fir: ::core::option::Option<::pbjson_types::Timestamp>,
1484    #[prost(uint32, tag = "31")]
1485    pub rtt_current: u32,
1486    #[prost(uint32, tag = "32")]
1487    pub rtt_max: u32,
1488    #[prost(uint32, tag = "33")]
1489    pub key_frames: u32,
1490    #[prost(message, optional, tag = "34")]
1491    pub last_key_frame: ::core::option::Option<::pbjson_types::Timestamp>,
1492    #[prost(uint32, tag = "35")]
1493    pub layer_lock_plis: u32,
1494    #[prost(message, optional, tag = "36")]
1495    pub last_layer_lock_pli: ::core::option::Option<::pbjson_types::Timestamp>,
1496    #[prost(message, optional, tag = "44")]
1497    pub packet_drift: ::core::option::Option<RtpDrift>,
1498    #[prost(message, optional, tag = "45")]
1499    pub ntp_report_drift: ::core::option::Option<RtpDrift>,
1500    #[prost(message, optional, tag = "46")]
1501    pub rebased_report_drift: ::core::option::Option<RtpDrift>,
1502    /// NEXT_ID: 48
1503    #[prost(message, optional, tag = "47")]
1504    pub received_report_drift: ::core::option::Option<RtpDrift>,
1505}
1506#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
1507pub struct RtcpSenderReportState {
1508    #[prost(uint32, tag = "1")]
1509    pub rtp_timestamp: u32,
1510    #[prost(uint64, tag = "2")]
1511    pub rtp_timestamp_ext: u64,
1512    #[prost(uint64, tag = "3")]
1513    pub ntp_timestamp: u64,
1514    /// time at which this happened
1515    #[prost(int64, tag = "4")]
1516    pub at: i64,
1517    #[prost(int64, tag = "5")]
1518    pub at_adjusted: i64,
1519    #[prost(uint32, tag = "6")]
1520    pub packets: u32,
1521    #[prost(uint64, tag = "7")]
1522    pub octets: u64,
1523}
1524#[derive(Clone, PartialEq, ::prost::Message)]
1525pub struct RtpForwarderState {
1526    #[prost(bool, tag = "1")]
1527    pub started: bool,
1528    #[prost(int32, tag = "2")]
1529    pub reference_layer_spatial: i32,
1530    #[prost(int64, tag = "3")]
1531    pub pre_start_time: i64,
1532    #[prost(uint64, tag = "4")]
1533    pub ext_first_timestamp: u64,
1534    #[prost(uint64, tag = "5")]
1535    pub dummy_start_timestamp_offset: u64,
1536    #[prost(message, optional, tag = "6")]
1537    pub rtp_munger: ::core::option::Option<RtpMungerState>,
1538    #[prost(message, repeated, tag = "8")]
1539    pub sender_report_state: ::prost::alloc::vec::Vec<RtcpSenderReportState>,
1540    #[prost(oneof = "rtp_forwarder_state::CodecMunger", tags = "7")]
1541    pub codec_munger: ::core::option::Option<rtp_forwarder_state::CodecMunger>,
1542}
1543/// Nested message and enum types in `RTPForwarderState`.
1544pub mod rtp_forwarder_state {
1545    #[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Oneof)]
1546    pub enum CodecMunger {
1547        #[prost(message, tag = "7")]
1548        Vp8Munger(super::Vp8MungerState),
1549    }
1550}
1551#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
1552pub struct RtpMungerState {
1553    #[prost(uint64, tag = "1")]
1554    pub ext_last_sequence_number: u64,
1555    #[prost(uint64, tag = "2")]
1556    pub ext_second_last_sequence_number: u64,
1557    #[prost(uint64, tag = "3")]
1558    pub ext_last_timestamp: u64,
1559    #[prost(uint64, tag = "4")]
1560    pub ext_second_last_timestamp: u64,
1561    #[prost(bool, tag = "5")]
1562    pub last_marker: bool,
1563    #[prost(bool, tag = "6")]
1564    pub second_last_marker: bool,
1565}
1566#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
1567pub struct Vp8MungerState {
1568    #[prost(int32, tag = "1")]
1569    pub ext_last_picture_id: i32,
1570    #[prost(bool, tag = "2")]
1571    pub picture_id_used: bool,
1572    #[prost(uint32, tag = "3")]
1573    pub last_tl0_pic_idx: u32,
1574    #[prost(bool, tag = "4")]
1575    pub tl0_pic_idx_used: bool,
1576    #[prost(bool, tag = "5")]
1577    pub tid_used: bool,
1578    #[prost(uint32, tag = "6")]
1579    pub last_key_idx: u32,
1580    #[prost(bool, tag = "7")]
1581    pub key_idx_used: bool,
1582}
1583#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
1584pub struct TimedVersion {
1585    #[prost(int64, tag = "1")]
1586    pub unix_micro: i64,
1587    #[prost(int32, tag = "2")]
1588    pub ticks: i32,
1589}
1590#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
1591pub struct DataStream {
1592}
1593/// Nested message and enum types in `DataStream`.
1594pub mod data_stream {
1595    /// header properties specific to text streams
1596    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
1597    pub struct TextHeader {
1598        #[prost(enumeration = "OperationType", tag = "1")]
1599        pub operation_type: i32,
1600        /// Optional: Version for updates/edits
1601        #[prost(int32, tag = "2")]
1602        pub version: i32,
1603        /// Optional: Reply to specific message
1604        #[prost(string, tag = "3")]
1605        pub reply_to_stream_id: ::prost::alloc::string::String,
1606        /// file attachments for text streams
1607        #[prost(string, repeated, tag = "4")]
1608        pub attached_stream_ids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1609        /// true if the text has been generated by an agent from a participant's audio transcription
1610        #[prost(bool, tag = "5")]
1611        pub generated: bool,
1612    }
1613    /// header properties specific to byte or file streams
1614    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
1615    pub struct ByteHeader {
1616        #[prost(string, tag = "1")]
1617        pub name: ::prost::alloc::string::String,
1618    }
1619    /// main DataStream.Header that contains a oneof for specific headers
1620    #[derive(Clone, PartialEq, ::prost::Message)]
1621    pub struct Header {
1622        /// unique identifier for this data stream
1623        #[prost(string, tag = "1")]
1624        pub stream_id: ::prost::alloc::string::String,
1625        /// using int64 for Unix timestamp
1626        #[prost(int64, tag = "2")]
1627        pub timestamp: i64,
1628        #[prost(string, tag = "3")]
1629        pub topic: ::prost::alloc::string::String,
1630        #[prost(string, tag = "4")]
1631        pub mime_type: ::prost::alloc::string::String,
1632        /// only populated for finite streams, if it's a stream of unknown size this stays empty
1633        #[prost(uint64, optional, tag = "5")]
1634        pub total_length: ::core::option::Option<u64>,
1635        ///   this is set on the DataPacket
1636        #[deprecated]
1637        #[prost(enumeration = "super::encryption::Type", tag = "7")]
1638        pub encryption_type: i32,
1639        /// user defined attributes map that can carry additional info
1640        #[prost(map = "string, string", tag = "8")]
1641        pub attributes: ::std::collections::HashMap<::prost::alloc::string::String, ::prost::alloc::string::String>,
1642        /// Optional inline content so that a data stream can be sent as a single packet for short payloads.
1643        ///
1644        /// content as binary (bytes)
1645        #[prost(bytes = "vec", optional, tag = "11")]
1646        pub inline_content: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
1647        #[prost(enumeration = "CompressionType", tag = "12")]
1648        pub compression: i32,
1649        /// oneof to choose between specific header types
1650        #[prost(oneof = "header::ContentHeader", tags = "9, 10")]
1651        pub content_header: ::core::option::Option<header::ContentHeader>,
1652    }
1653    /// Nested message and enum types in `Header`.
1654    pub mod header {
1655        /// oneof to choose between specific header types
1656        #[derive(Clone, PartialEq, Eq, Hash, ::prost::Oneof)]
1657        pub enum ContentHeader {
1658            #[prost(message, tag = "9")]
1659            TextHeader(super::TextHeader),
1660            #[prost(message, tag = "10")]
1661            ByteHeader(super::ByteHeader),
1662        }
1663    }
1664    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
1665    pub struct Chunk {
1666        /// unique identifier for this data stream to map it to the correct header
1667        #[prost(string, tag = "1")]
1668        pub stream_id: ::prost::alloc::string::String,
1669        #[prost(uint64, tag = "2")]
1670        pub chunk_index: u64,
1671        /// content as binary (bytes)
1672        #[prost(bytes = "vec", tag = "3")]
1673        pub content: ::prost::alloc::vec::Vec<u8>,
1674        /// a version indicating that this chunk_index has been retroactively modified and the original one needs to be replaced
1675        #[prost(int32, tag = "4")]
1676        pub version: i32,
1677        /// this is set on the DataPacket
1678        #[deprecated]
1679        #[prost(bytes = "vec", optional, tag = "5")]
1680        pub iv: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
1681    }
1682    #[derive(Clone, PartialEq, ::prost::Message)]
1683    pub struct Trailer {
1684        /// unique identifier for this data stream
1685        #[prost(string, tag = "1")]
1686        pub stream_id: ::prost::alloc::string::String,
1687        /// reason why the stream was closed (could contain "error" / "interrupted" / empty for expected end)
1688        #[prost(string, tag = "2")]
1689        pub reason: ::prost::alloc::string::String,
1690        /// finalizing updates for the stream, can also include additional insights for errors or endTime for transcription
1691        #[prost(map = "string, string", tag = "3")]
1692        pub attributes: ::std::collections::HashMap<::prost::alloc::string::String, ::prost::alloc::string::String>,
1693    }
1694    /// enum for operation types (specific to TextHeader)
1695    #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
1696    #[repr(i32)]
1697    pub enum OperationType {
1698        Create = 0,
1699        Update = 1,
1700        Delete = 2,
1701        Reaction = 3,
1702    }
1703    impl OperationType {
1704        /// String value of the enum field names used in the ProtoBuf definition.
1705        ///
1706        /// The values are not transformed in any way and thus are considered stable
1707        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1708        pub fn as_str_name(&self) -> &'static str {
1709            match self {
1710                Self::Create => "CREATE",
1711                Self::Update => "UPDATE",
1712                Self::Delete => "DELETE",
1713                Self::Reaction => "REACTION",
1714            }
1715        }
1716        /// Creates an enum from field names used in the ProtoBuf definition.
1717        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1718            match value {
1719                "CREATE" => Some(Self::Create),
1720                "UPDATE" => Some(Self::Update),
1721                "DELETE" => Some(Self::Delete),
1722                "REACTION" => Some(Self::Reaction),
1723                _ => None,
1724            }
1725        }
1726    }
1727    /// The compression type of the whole data stream
1728    ///
1729    /// This will only get populated when send to participants with a
1730    /// client protocol >= 2 which advertise a client capability of CAP_COMPRESSION_DEFLATE_RAW
1731    #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
1732    #[repr(i32)]
1733    pub enum CompressionType {
1734        None = 0,
1735        /// DEFLATE_RAW = DEFLATE without header+checksum/trailer
1736        DeflateRaw = 1,
1737    }
1738    impl CompressionType {
1739        /// String value of the enum field names used in the ProtoBuf definition.
1740        ///
1741        /// The values are not transformed in any way and thus are considered stable
1742        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1743        pub fn as_str_name(&self) -> &'static str {
1744            match self {
1745                Self::None => "NONE",
1746                Self::DeflateRaw => "DEFLATE_RAW",
1747            }
1748        }
1749        /// Creates an enum from field names used in the ProtoBuf definition.
1750        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1751            match value {
1752                "NONE" => Some(Self::None),
1753                "DEFLATE_RAW" => Some(Self::DeflateRaw),
1754                _ => None,
1755            }
1756        }
1757    }
1758}
1759#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
1760pub struct FilterParams {
1761    #[prost(string, repeated, tag = "1")]
1762    pub include_events: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1763    #[prost(string, repeated, tag = "2")]
1764    pub exclude_events: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1765}
1766#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
1767pub struct WebhookConfig {
1768    #[prost(string, tag = "1")]
1769    pub url: ::prost::alloc::string::String,
1770    #[prost(string, tag = "2")]
1771    pub signing_key: ::prost::alloc::string::String,
1772    #[prost(message, optional, tag = "3")]
1773    pub filter_params: ::core::option::Option<FilterParams>,
1774}
1775#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
1776pub struct SubscribedAudioCodec {
1777    #[prost(string, tag = "1")]
1778    pub codec: ::prost::alloc::string::String,
1779    #[prost(bool, tag = "2")]
1780    pub enabled: bool,
1781}
1782#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
1783#[repr(i32)]
1784pub enum AudioCodec {
1785    DefaultAc = 0,
1786    Opus = 1,
1787    Aac = 2,
1788    AcMp3 = 3,
1789}
1790impl AudioCodec {
1791    /// String value of the enum field names used in the ProtoBuf definition.
1792    ///
1793    /// The values are not transformed in any way and thus are considered stable
1794    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1795    pub fn as_str_name(&self) -> &'static str {
1796        match self {
1797            Self::DefaultAc => "DEFAULT_AC",
1798            Self::Opus => "OPUS",
1799            Self::Aac => "AAC",
1800            Self::AcMp3 => "AC_MP3",
1801        }
1802    }
1803    /// Creates an enum from field names used in the ProtoBuf definition.
1804    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1805        match value {
1806            "DEFAULT_AC" => Some(Self::DefaultAc),
1807            "OPUS" => Some(Self::Opus),
1808            "AAC" => Some(Self::Aac),
1809            "AC_MP3" => Some(Self::AcMp3),
1810            _ => None,
1811        }
1812    }
1813}
1814#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
1815#[repr(i32)]
1816pub enum VideoCodec {
1817    DefaultVc = 0,
1818    H264Baseline = 1,
1819    H264Main = 2,
1820    H264High = 3,
1821    Vp8 = 4,
1822}
1823impl VideoCodec {
1824    /// String value of the enum field names used in the ProtoBuf definition.
1825    ///
1826    /// The values are not transformed in any way and thus are considered stable
1827    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1828    pub fn as_str_name(&self) -> &'static str {
1829        match self {
1830            Self::DefaultVc => "DEFAULT_VC",
1831            Self::H264Baseline => "H264_BASELINE",
1832            Self::H264Main => "H264_MAIN",
1833            Self::H264High => "H264_HIGH",
1834            Self::Vp8 => "VP8",
1835        }
1836    }
1837    /// Creates an enum from field names used in the ProtoBuf definition.
1838    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1839        match value {
1840            "DEFAULT_VC" => Some(Self::DefaultVc),
1841            "H264_BASELINE" => Some(Self::H264Baseline),
1842            "H264_MAIN" => Some(Self::H264Main),
1843            "H264_HIGH" => Some(Self::H264High),
1844            "VP8" => Some(Self::Vp8),
1845            _ => None,
1846        }
1847    }
1848}
1849#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
1850#[repr(i32)]
1851pub enum ImageCodec {
1852    IcDefault = 0,
1853    IcJpeg = 1,
1854}
1855impl ImageCodec {
1856    /// String value of the enum field names used in the ProtoBuf definition.
1857    ///
1858    /// The values are not transformed in any way and thus are considered stable
1859    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1860    pub fn as_str_name(&self) -> &'static str {
1861        match self {
1862            Self::IcDefault => "IC_DEFAULT",
1863            Self::IcJpeg => "IC_JPEG",
1864        }
1865    }
1866    /// Creates an enum from field names used in the ProtoBuf definition.
1867    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1868        match value {
1869            "IC_DEFAULT" => Some(Self::IcDefault),
1870            "IC_JPEG" => Some(Self::IcJpeg),
1871            _ => None,
1872        }
1873    }
1874}
1875/// Policy for publisher to handle subscribers that are unable to support the primary codec of a track
1876#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
1877#[repr(i32)]
1878pub enum BackupCodecPolicy {
1879    /// default behavior, the track prefer to regress to backup codec and all subscribers will receive the backup codec,
1880    /// the sfu will try to regress codec if possible but not assured.
1881    PreferRegression = 0,
1882    /// encoding/send the primary and backup codec simultaneously
1883    Simulcast = 1,
1884    /// force the track to regress to backup codec, this option can be used in video conference or the publisher has limited bandwidth/encoding power
1885    Regression = 2,
1886}
1887impl BackupCodecPolicy {
1888    /// String value of the enum field names used in the ProtoBuf definition.
1889    ///
1890    /// The values are not transformed in any way and thus are considered stable
1891    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1892    pub fn as_str_name(&self) -> &'static str {
1893        match self {
1894            Self::PreferRegression => "PREFER_REGRESSION",
1895            Self::Simulcast => "SIMULCAST",
1896            Self::Regression => "REGRESSION",
1897        }
1898    }
1899    /// Creates an enum from field names used in the ProtoBuf definition.
1900    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1901        match value {
1902            "PREFER_REGRESSION" => Some(Self::PreferRegression),
1903            "SIMULCAST" => Some(Self::Simulcast),
1904            "REGRESSION" => Some(Self::Regression),
1905            _ => None,
1906        }
1907    }
1908}
1909#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
1910#[repr(i32)]
1911pub enum TrackType {
1912    Audio = 0,
1913    Video = 1,
1914    Data = 2,
1915}
1916impl TrackType {
1917    /// String value of the enum field names used in the ProtoBuf definition.
1918    ///
1919    /// The values are not transformed in any way and thus are considered stable
1920    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1921    pub fn as_str_name(&self) -> &'static str {
1922        match self {
1923            Self::Audio => "AUDIO",
1924            Self::Video => "VIDEO",
1925            Self::Data => "DATA",
1926        }
1927    }
1928    /// Creates an enum from field names used in the ProtoBuf definition.
1929    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1930        match value {
1931            "AUDIO" => Some(Self::Audio),
1932            "VIDEO" => Some(Self::Video),
1933            "DATA" => Some(Self::Data),
1934            _ => None,
1935        }
1936    }
1937}
1938#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
1939#[repr(i32)]
1940pub enum TrackSource {
1941    Unknown = 0,
1942    Camera = 1,
1943    Microphone = 2,
1944    ScreenShare = 3,
1945    ScreenShareAudio = 4,
1946}
1947impl TrackSource {
1948    /// String value of the enum field names used in the ProtoBuf definition.
1949    ///
1950    /// The values are not transformed in any way and thus are considered stable
1951    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1952    pub fn as_str_name(&self) -> &'static str {
1953        match self {
1954            Self::Unknown => "UNKNOWN",
1955            Self::Camera => "CAMERA",
1956            Self::Microphone => "MICROPHONE",
1957            Self::ScreenShare => "SCREEN_SHARE",
1958            Self::ScreenShareAudio => "SCREEN_SHARE_AUDIO",
1959        }
1960    }
1961    /// Creates an enum from field names used in the ProtoBuf definition.
1962    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1963        match value {
1964            "UNKNOWN" => Some(Self::Unknown),
1965            "CAMERA" => Some(Self::Camera),
1966            "MICROPHONE" => Some(Self::Microphone),
1967            "SCREEN_SHARE" => Some(Self::ScreenShare),
1968            "SCREEN_SHARE_AUDIO" => Some(Self::ScreenShareAudio),
1969            _ => None,
1970        }
1971    }
1972}
1973#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
1974#[repr(i32)]
1975pub enum DataTrackExtensionId {
1976    DteiInvalid = 0,
1977    DteiParticipantSid = 1,
1978}
1979impl DataTrackExtensionId {
1980    /// String value of the enum field names used in the ProtoBuf definition.
1981    ///
1982    /// The values are not transformed in any way and thus are considered stable
1983    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
1984    pub fn as_str_name(&self) -> &'static str {
1985        match self {
1986            Self::DteiInvalid => "DTEI_INVALID",
1987            Self::DteiParticipantSid => "DTEI_PARTICIPANT_SID",
1988        }
1989    }
1990    /// Creates an enum from field names used in the ProtoBuf definition.
1991    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
1992        match value {
1993            "DTEI_INVALID" => Some(Self::DteiInvalid),
1994            "DTEI_PARTICIPANT_SID" => Some(Self::DteiParticipantSid),
1995            _ => None,
1996        }
1997    }
1998}
1999#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
2000#[repr(i32)]
2001pub enum VideoQuality {
2002    Low = 0,
2003    Medium = 1,
2004    High = 2,
2005    Off = 3,
2006}
2007impl VideoQuality {
2008    /// String value of the enum field names used in the ProtoBuf definition.
2009    ///
2010    /// The values are not transformed in any way and thus are considered stable
2011    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
2012    pub fn as_str_name(&self) -> &'static str {
2013        match self {
2014            Self::Low => "LOW",
2015            Self::Medium => "MEDIUM",
2016            Self::High => "HIGH",
2017            Self::Off => "OFF",
2018        }
2019    }
2020    /// Creates an enum from field names used in the ProtoBuf definition.
2021    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
2022        match value {
2023            "LOW" => Some(Self::Low),
2024            "MEDIUM" => Some(Self::Medium),
2025            "HIGH" => Some(Self::High),
2026            "OFF" => Some(Self::Off),
2027            _ => None,
2028        }
2029    }
2030}
2031#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
2032#[repr(i32)]
2033pub enum ConnectionQuality {
2034    Poor = 0,
2035    Good = 1,
2036    Excellent = 2,
2037    Lost = 3,
2038}
2039impl ConnectionQuality {
2040    /// String value of the enum field names used in the ProtoBuf definition.
2041    ///
2042    /// The values are not transformed in any way and thus are considered stable
2043    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
2044    pub fn as_str_name(&self) -> &'static str {
2045        match self {
2046            Self::Poor => "POOR",
2047            Self::Good => "GOOD",
2048            Self::Excellent => "EXCELLENT",
2049            Self::Lost => "LOST",
2050        }
2051    }
2052    /// Creates an enum from field names used in the ProtoBuf definition.
2053    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
2054        match value {
2055            "POOR" => Some(Self::Poor),
2056            "GOOD" => Some(Self::Good),
2057            "EXCELLENT" => Some(Self::Excellent),
2058            "LOST" => Some(Self::Lost),
2059            _ => None,
2060        }
2061    }
2062}
2063#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
2064#[repr(i32)]
2065pub enum ClientConfigSetting {
2066    Unset = 0,
2067    Disabled = 1,
2068    Enabled = 2,
2069}
2070impl ClientConfigSetting {
2071    /// String value of the enum field names used in the ProtoBuf definition.
2072    ///
2073    /// The values are not transformed in any way and thus are considered stable
2074    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
2075    pub fn as_str_name(&self) -> &'static str {
2076        match self {
2077            Self::Unset => "UNSET",
2078            Self::Disabled => "DISABLED",
2079            Self::Enabled => "ENABLED",
2080        }
2081    }
2082    /// Creates an enum from field names used in the ProtoBuf definition.
2083    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
2084        match value {
2085            "UNSET" => Some(Self::Unset),
2086            "DISABLED" => Some(Self::Disabled),
2087            "ENABLED" => Some(Self::Enabled),
2088            _ => None,
2089        }
2090    }
2091}
2092#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
2093#[repr(i32)]
2094pub enum DisconnectReason {
2095    UnknownReason = 0,
2096    /// the client initiated the disconnect
2097    ClientInitiated = 1,
2098    /// another participant with the same identity has joined the room
2099    DuplicateIdentity = 2,
2100    /// the server instance is shutting down
2101    ServerShutdown = 3,
2102    /// RoomService.RemoveParticipant was called
2103    ParticipantRemoved = 4,
2104    /// RoomService.DeleteRoom was called
2105    RoomDeleted = 5,
2106    /// the client is attempting to resume a session, but server is not aware of it
2107    StateMismatch = 6,
2108    /// client was unable to connect fully
2109    JoinFailure = 7,
2110    /// Cloud-only, the server requested Participant to migrate the connection elsewhere
2111    Migration = 8,
2112    /// the signal websocket was closed unexpectedly
2113    SignalClose = 9,
2114    /// the room was closed, due to all Standard and Ingress participants having left
2115    RoomClosed = 10,
2116    /// SIP callee did not respond in time
2117    UserUnavailable = 11,
2118    /// SIP callee rejected the call (busy)
2119    UserRejected = 12,
2120    /// SIP protocol failure or unexpected response
2121    SipTrunkFailure = 13,
2122    /// server timed out a participant session
2123    ConnectionTimeout = 14,
2124    /// media stream failure or media timeout
2125    MediaFailure = 15,
2126    /// agent encountered an error
2127    AgentError = 16,
2128}
2129impl DisconnectReason {
2130    /// String value of the enum field names used in the ProtoBuf definition.
2131    ///
2132    /// The values are not transformed in any way and thus are considered stable
2133    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
2134    pub fn as_str_name(&self) -> &'static str {
2135        match self {
2136            Self::UnknownReason => "UNKNOWN_REASON",
2137            Self::ClientInitiated => "CLIENT_INITIATED",
2138            Self::DuplicateIdentity => "DUPLICATE_IDENTITY",
2139            Self::ServerShutdown => "SERVER_SHUTDOWN",
2140            Self::ParticipantRemoved => "PARTICIPANT_REMOVED",
2141            Self::RoomDeleted => "ROOM_DELETED",
2142            Self::StateMismatch => "STATE_MISMATCH",
2143            Self::JoinFailure => "JOIN_FAILURE",
2144            Self::Migration => "MIGRATION",
2145            Self::SignalClose => "SIGNAL_CLOSE",
2146            Self::RoomClosed => "ROOM_CLOSED",
2147            Self::UserUnavailable => "USER_UNAVAILABLE",
2148            Self::UserRejected => "USER_REJECTED",
2149            Self::SipTrunkFailure => "SIP_TRUNK_FAILURE",
2150            Self::ConnectionTimeout => "CONNECTION_TIMEOUT",
2151            Self::MediaFailure => "MEDIA_FAILURE",
2152            Self::AgentError => "AGENT_ERROR",
2153        }
2154    }
2155    /// Creates an enum from field names used in the ProtoBuf definition.
2156    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
2157        match value {
2158            "UNKNOWN_REASON" => Some(Self::UnknownReason),
2159            "CLIENT_INITIATED" => Some(Self::ClientInitiated),
2160            "DUPLICATE_IDENTITY" => Some(Self::DuplicateIdentity),
2161            "SERVER_SHUTDOWN" => Some(Self::ServerShutdown),
2162            "PARTICIPANT_REMOVED" => Some(Self::ParticipantRemoved),
2163            "ROOM_DELETED" => Some(Self::RoomDeleted),
2164            "STATE_MISMATCH" => Some(Self::StateMismatch),
2165            "JOIN_FAILURE" => Some(Self::JoinFailure),
2166            "MIGRATION" => Some(Self::Migration),
2167            "SIGNAL_CLOSE" => Some(Self::SignalClose),
2168            "ROOM_CLOSED" => Some(Self::RoomClosed),
2169            "USER_UNAVAILABLE" => Some(Self::UserUnavailable),
2170            "USER_REJECTED" => Some(Self::UserRejected),
2171            "SIP_TRUNK_FAILURE" => Some(Self::SipTrunkFailure),
2172            "CONNECTION_TIMEOUT" => Some(Self::ConnectionTimeout),
2173            "MEDIA_FAILURE" => Some(Self::MediaFailure),
2174            "AGENT_ERROR" => Some(Self::AgentError),
2175            _ => None,
2176        }
2177    }
2178}
2179#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
2180#[repr(i32)]
2181pub enum ReconnectReason {
2182    RrUnknown = 0,
2183    RrSignalDisconnected = 1,
2184    RrPublisherFailed = 2,
2185    RrSubscriberFailed = 3,
2186    RrSwitchCandidate = 4,
2187}
2188impl ReconnectReason {
2189    /// String value of the enum field names used in the ProtoBuf definition.
2190    ///
2191    /// The values are not transformed in any way and thus are considered stable
2192    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
2193    pub fn as_str_name(&self) -> &'static str {
2194        match self {
2195            Self::RrUnknown => "RR_UNKNOWN",
2196            Self::RrSignalDisconnected => "RR_SIGNAL_DISCONNECTED",
2197            Self::RrPublisherFailed => "RR_PUBLISHER_FAILED",
2198            Self::RrSubscriberFailed => "RR_SUBSCRIBER_FAILED",
2199            Self::RrSwitchCandidate => "RR_SWITCH_CANDIDATE",
2200        }
2201    }
2202    /// Creates an enum from field names used in the ProtoBuf definition.
2203    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
2204        match value {
2205            "RR_UNKNOWN" => Some(Self::RrUnknown),
2206            "RR_SIGNAL_DISCONNECTED" => Some(Self::RrSignalDisconnected),
2207            "RR_PUBLISHER_FAILED" => Some(Self::RrPublisherFailed),
2208            "RR_SUBSCRIBER_FAILED" => Some(Self::RrSubscriberFailed),
2209            "RR_SWITCH_CANDIDATE" => Some(Self::RrSwitchCandidate),
2210            _ => None,
2211        }
2212    }
2213}
2214#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
2215#[repr(i32)]
2216pub enum SubscriptionError {
2217    SeUnknown = 0,
2218    SeCodecUnsupported = 1,
2219    SeTrackNotfound = 2,
2220}
2221impl SubscriptionError {
2222    /// String value of the enum field names used in the ProtoBuf definition.
2223    ///
2224    /// The values are not transformed in any way and thus are considered stable
2225    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
2226    pub fn as_str_name(&self) -> &'static str {
2227        match self {
2228            Self::SeUnknown => "SE_UNKNOWN",
2229            Self::SeCodecUnsupported => "SE_CODEC_UNSUPPORTED",
2230            Self::SeTrackNotfound => "SE_TRACK_NOTFOUND",
2231        }
2232    }
2233    /// Creates an enum from field names used in the ProtoBuf definition.
2234    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
2235        match value {
2236            "SE_UNKNOWN" => Some(Self::SeUnknown),
2237            "SE_CODEC_UNSUPPORTED" => Some(Self::SeCodecUnsupported),
2238            "SE_TRACK_NOTFOUND" => Some(Self::SeTrackNotfound),
2239            _ => None,
2240        }
2241    }
2242}
2243#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
2244#[repr(i32)]
2245pub enum AudioTrackFeature {
2246    TfStereo = 0,
2247    TfNoDtx = 1,
2248    TfAutoGainControl = 2,
2249    TfEchoCancellation = 3,
2250    TfNoiseSuppression = 4,
2251    TfEnhancedNoiseCancellation = 5,
2252    /// client will buffer audio once available and send it to the server via bytes stream once connected
2253    TfPreconnectBuffer = 6,
2254}
2255impl AudioTrackFeature {
2256    /// String value of the enum field names used in the ProtoBuf definition.
2257    ///
2258    /// The values are not transformed in any way and thus are considered stable
2259    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
2260    pub fn as_str_name(&self) -> &'static str {
2261        match self {
2262            Self::TfStereo => "TF_STEREO",
2263            Self::TfNoDtx => "TF_NO_DTX",
2264            Self::TfAutoGainControl => "TF_AUTO_GAIN_CONTROL",
2265            Self::TfEchoCancellation => "TF_ECHO_CANCELLATION",
2266            Self::TfNoiseSuppression => "TF_NOISE_SUPPRESSION",
2267            Self::TfEnhancedNoiseCancellation => "TF_ENHANCED_NOISE_CANCELLATION",
2268            Self::TfPreconnectBuffer => "TF_PRECONNECT_BUFFER",
2269        }
2270    }
2271    /// Creates an enum from field names used in the ProtoBuf definition.
2272    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
2273        match value {
2274            "TF_STEREO" => Some(Self::TfStereo),
2275            "TF_NO_DTX" => Some(Self::TfNoDtx),
2276            "TF_AUTO_GAIN_CONTROL" => Some(Self::TfAutoGainControl),
2277            "TF_ECHO_CANCELLATION" => Some(Self::TfEchoCancellation),
2278            "TF_NOISE_SUPPRESSION" => Some(Self::TfNoiseSuppression),
2279            "TF_ENHANCED_NOISE_CANCELLATION" => Some(Self::TfEnhancedNoiseCancellation),
2280            "TF_PRECONNECT_BUFFER" => Some(Self::TfPreconnectBuffer),
2281            _ => None,
2282        }
2283    }
2284}
2285#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
2286#[repr(i32)]
2287pub enum PacketTrailerFeature {
2288    PtfUserTimestamp = 0,
2289    PtfFrameId = 1,
2290    PtfUserData = 2,
2291}
2292impl PacketTrailerFeature {
2293    /// String value of the enum field names used in the ProtoBuf definition.
2294    ///
2295    /// The values are not transformed in any way and thus are considered stable
2296    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
2297    pub fn as_str_name(&self) -> &'static str {
2298        match self {
2299            Self::PtfUserTimestamp => "PTF_USER_TIMESTAMP",
2300            Self::PtfFrameId => "PTF_FRAME_ID",
2301            Self::PtfUserData => "PTF_USER_DATA",
2302        }
2303    }
2304    /// Creates an enum from field names used in the ProtoBuf definition.
2305    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
2306        match value {
2307            "PTF_USER_TIMESTAMP" => Some(Self::PtfUserTimestamp),
2308            "PTF_FRAME_ID" => Some(Self::PtfFrameId),
2309            "PTF_USER_DATA" => Some(Self::PtfUserData),
2310            _ => None,
2311        }
2312    }
2313}
2314// --- Core Request ---
2315
2316#[derive(Clone, PartialEq, ::prost::Message)]
2317pub struct StartEgressRequest {
2318    #[prost(string, tag = "1")]
2319    pub room_name: ::prost::alloc::string::String,
2320    /// At least one required
2321    #[prost(message, repeated, tag = "7")]
2322    pub outputs: ::prost::alloc::vec::Vec<Output>,
2323    /// Request-level storage default
2324    #[prost(message, optional, tag = "8")]
2325    pub storage: ::core::option::Option<StorageConfig>,
2326    /// Optional additional webhook config
2327    #[prost(message, repeated, tag = "9")]
2328    pub webhooks: ::prost::alloc::vec::Vec<WebhookConfig>,
2329    #[prost(oneof = "start_egress_request::Source", tags = "2, 3, 4")]
2330    pub source: ::core::option::Option<start_egress_request::Source>,
2331    /// Optional — default H264_720P_30
2332    #[prost(oneof = "start_egress_request::Encoding", tags = "5, 6")]
2333    pub encoding: ::core::option::Option<start_egress_request::Encoding>,
2334}
2335/// Nested message and enum types in `StartEgressRequest`.
2336pub mod start_egress_request {
2337    #[derive(Clone, PartialEq, ::prost::Oneof)]
2338    pub enum Source {
2339        #[prost(message, tag = "2")]
2340        Template(super::TemplateSource),
2341        #[prost(message, tag = "3")]
2342        Web(super::WebSource),
2343        #[prost(message, tag = "4")]
2344        Media(super::MediaSource),
2345    }
2346    /// Optional — default H264_720P_30
2347    #[derive(Clone, Copy, PartialEq, ::prost::Oneof)]
2348    pub enum Encoding {
2349        #[prost(enumeration = "super::EncodingOptionsPreset", tag = "5")]
2350        Preset(i32),
2351        #[prost(message, tag = "6")]
2352        Advanced(super::EncodingOptions),
2353    }
2354}
2355// --- Source Types ---
2356
2357/// Room composite recording via layout template.
2358/// Service generates token, constructs recorder URL, awaits start signal.
2359#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
2360pub struct TemplateSource {
2361    #[prost(string, tag = "1")]
2362    pub layout: ::prost::alloc::string::String,
2363    #[prost(bool, tag = "2")]
2364    pub audio_only: bool,
2365    #[prost(bool, tag = "3")]
2366    pub video_only: bool,
2367    #[prost(string, tag = "4")]
2368    pub custom_base_url: ::prost::alloc::string::String,
2369}
2370/// Record a custom URL via headless browser.
2371#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
2372pub struct WebSource {
2373    #[prost(string, tag = "1")]
2374    pub url: ::prost::alloc::string::String,
2375    #[prost(bool, tag = "2")]
2376    pub audio_only: bool,
2377    #[prost(bool, tag = "3")]
2378    pub video_only: bool,
2379    #[prost(bool, tag = "4")]
2380    pub await_start_signal: bool,
2381}
2382/// Capture tracks directly from a room via SDK.
2383/// Unifies deprecated Participant, TrackComposite, and Track egress.
2384#[derive(Clone, PartialEq, ::prost::Message)]
2385pub struct MediaSource {
2386    /// TODO: DataConfig data = 4;
2387    #[prost(message, optional, tag = "3")]
2388    pub audio: ::core::option::Option<AudioConfig>,
2389    #[prost(oneof = "media_source::Video", tags = "1, 2")]
2390    pub video: ::core::option::Option<media_source::Video>,
2391}
2392/// Nested message and enum types in `MediaSource`.
2393pub mod media_source {
2394    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Oneof)]
2395    pub enum Video {
2396        #[prost(string, tag = "1")]
2397        VideoTrackId(::prost::alloc::string::String),
2398        #[prost(message, tag = "2")]
2399        ParticipantVideo(super::ParticipantVideo),
2400    }
2401}
2402// --- Video Configuration ---
2403
2404#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
2405pub struct ParticipantVideo {
2406    #[prost(string, tag = "1")]
2407    pub identity: ::prost::alloc::string::String,
2408    #[prost(bool, tag = "2")]
2409    pub prefer_screen_share: bool,
2410}
2411// --- Audio Configuration ---
2412
2413/// Unified audio selection and channel routing.
2414/// Each route specifies both which audio to capture and which channel to output to.
2415#[derive(Clone, PartialEq, ::prost::Message)]
2416pub struct AudioConfig {
2417    /// If true, all unmatched audio is recorded to both channels
2418    #[prost(bool, tag = "1")]
2419    pub capture_all: bool,
2420    #[prost(message, repeated, tag = "2")]
2421    pub routes: ::prost::alloc::vec::Vec<AudioRoute>,
2422}
2423#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
2424pub struct AudioRoute {
2425    #[prost(enumeration = "AudioChannel", tag = "4")]
2426    pub channel: i32,
2427    #[prost(oneof = "audio_route::Match", tags = "1, 2, 3")]
2428    pub r#match: ::core::option::Option<audio_route::Match>,
2429}
2430/// Nested message and enum types in `AudioRoute`.
2431pub mod audio_route {
2432    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Oneof)]
2433    pub enum Match {
2434        #[prost(string, tag = "1")]
2435        TrackId(::prost::alloc::string::String),
2436        #[prost(string, tag = "2")]
2437        ParticipantIdentity(::prost::alloc::string::String),
2438        #[prost(enumeration = "super::participant_info::Kind", tag = "3")]
2439        ParticipantKind(i32),
2440    }
2441}
2442// --- Data Track Configuration ---
2443
2444#[derive(Clone, PartialEq, ::prost::Message)]
2445pub struct DataConfig {
2446    #[prost(bool, tag = "1")]
2447    pub capture_all: bool,
2448    #[prost(message, repeated, tag = "2")]
2449    pub selectors: ::prost::alloc::vec::Vec<DataSelector>,
2450}
2451#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
2452pub struct DataSelector {
2453    #[prost(oneof = "data_selector::Match", tags = "1, 2")]
2454    pub r#match: ::core::option::Option<data_selector::Match>,
2455}
2456/// Nested message and enum types in `DataSelector`.
2457pub mod data_selector {
2458    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Oneof)]
2459    pub enum Match {
2460        #[prost(string, tag = "1")]
2461        TrackId(::prost::alloc::string::String),
2462        #[prost(string, tag = "2")]
2463        ParticipantIdentity(::prost::alloc::string::String),
2464    }
2465}
2466#[derive(Clone, Copy, PartialEq, ::prost::Message)]
2467pub struct EncodingOptions {
2468    /// (default 1920)
2469    #[prost(int32, tag = "1")]
2470    pub width: i32,
2471    /// (default 1080)
2472    #[prost(int32, tag = "2")]
2473    pub height: i32,
2474    /// (default 24)
2475    #[prost(int32, tag = "3")]
2476    pub depth: i32,
2477    /// (default 30)
2478    #[prost(int32, tag = "4")]
2479    pub framerate: i32,
2480    /// (default OPUS)
2481    #[prost(enumeration = "AudioCodec", tag = "5")]
2482    pub audio_codec: i32,
2483    /// (default 128)
2484    #[prost(int32, tag = "6")]
2485    pub audio_bitrate: i32,
2486    /// (default 44100)
2487    #[prost(int32, tag = "7")]
2488    pub audio_frequency: i32,
2489    /// (default H264_MAIN)
2490    #[prost(enumeration = "VideoCodec", tag = "8")]
2491    pub video_codec: i32,
2492    /// (default 4500)
2493    #[prost(int32, tag = "9")]
2494    pub video_bitrate: i32,
2495    /// in seconds (default 4s for streaming, segment duration for segmented output, encoder default for files)
2496    #[prost(double, tag = "10")]
2497    pub key_frame_interval: f64,
2498    /// --- Deprecated ---
2499    ///
2500    /// quality setting on audio encoder
2501    #[deprecated]
2502    #[prost(int32, tag = "11")]
2503    pub audio_quality: i32,
2504    /// quality setting on video encoder
2505    #[deprecated]
2506    #[prost(int32, tag = "12")]
2507    pub video_quality: i32,
2508}
2509// --- Output Types ---
2510
2511#[derive(Clone, PartialEq, ::prost::Message)]
2512pub struct Output {
2513    /// Per-output storage override (falls back to request, then server)
2514    #[prost(message, optional, tag = "6")]
2515    pub storage: ::core::option::Option<StorageConfig>,
2516    #[prost(oneof = "output::Config", tags = "1, 2, 3, 4")]
2517    pub config: ::core::option::Option<output::Config>,
2518}
2519/// Nested message and enum types in `Output`.
2520pub mod output {
2521    #[derive(Clone, PartialEq, ::prost::Oneof)]
2522    pub enum Config {
2523        #[prost(message, tag = "1")]
2524        File(super::FileOutput),
2525        #[prost(message, tag = "2")]
2526        Stream(super::StreamOutput),
2527        #[prost(message, tag = "3")]
2528        Segments(super::SegmentedFileOutput),
2529        /// TODO: DataOutput data = 5;
2530        #[prost(message, tag = "4")]
2531        Images(super::ImageOutput),
2532    }
2533}
2534/// Unified file output — replaces v1 EncodedFileOutput and DirectFileOutput.
2535/// Whether transcoded depends on encoding options on the request.
2536#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
2537pub struct FileOutput {
2538    #[prost(enumeration = "EncodedFileType", tag = "1")]
2539    pub file_type: i32,
2540    #[prost(string, tag = "2")]
2541    pub filepath: ::prost::alloc::string::String,
2542    #[prost(bool, tag = "3")]
2543    pub disable_manifest: bool,
2544}
2545#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
2546pub struct StreamOutput {
2547    /// required
2548    #[prost(enumeration = "StreamProtocol", tag = "1")]
2549    pub protocol: i32,
2550    /// required
2551    #[prost(string, repeated, tag = "2")]
2552    pub urls: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
2553}
2554/// Used to generate HLS segments or other kind of segmented output
2555#[derive(Clone, PartialEq, ::prost::Message)]
2556pub struct SegmentedFileOutput {
2557    /// (optional)
2558    #[prost(enumeration = "SegmentedFileProtocol", tag = "1")]
2559    pub protocol: i32,
2560    /// (optional)
2561    #[prost(string, tag = "2")]
2562    pub filename_prefix: ::prost::alloc::string::String,
2563    /// (optional)
2564    #[prost(string, tag = "3")]
2565    pub playlist_name: ::prost::alloc::string::String,
2566    /// (optional, disabled if not provided). Path of a live playlist
2567    #[prost(string, tag = "11")]
2568    pub live_playlist_name: ::prost::alloc::string::String,
2569    /// in seconds (optional)
2570    #[prost(uint32, tag = "4")]
2571    pub segment_duration: u32,
2572    /// (optional, default INDEX)
2573    #[prost(enumeration = "SegmentedFileSuffix", tag = "10")]
2574    pub filename_suffix: i32,
2575    /// disable upload of manifest file (default false)
2576    #[prost(bool, tag = "8")]
2577    pub disable_manifest: bool,
2578    /// TODO: deprecate
2579    #[prost(oneof = "segmented_file_output::Output", tags = "5, 6, 7, 9")]
2580    pub output: ::core::option::Option<segmented_file_output::Output>,
2581}
2582/// Nested message and enum types in `SegmentedFileOutput`.
2583pub mod segmented_file_output {
2584    /// TODO: deprecate
2585    #[derive(Clone, PartialEq, ::prost::Oneof)]
2586    pub enum Output {
2587        #[prost(message, tag = "5")]
2588        S3(super::S3Upload),
2589        #[prost(message, tag = "6")]
2590        Gcp(super::GcpUpload),
2591        #[prost(message, tag = "7")]
2592        Azure(super::AzureBlobUpload),
2593        #[prost(message, tag = "9")]
2594        AliOss(super::AliOssUpload),
2595    }
2596}
2597/// Capture images at a specified interval
2598#[derive(Clone, PartialEq, ::prost::Message)]
2599pub struct ImageOutput {
2600    /// in seconds (required)
2601    #[prost(uint32, tag = "1")]
2602    pub capture_interval: u32,
2603    /// (optional, defaults to track width)
2604    #[prost(int32, tag = "2")]
2605    pub width: i32,
2606    /// (optional, defaults to track height)
2607    #[prost(int32, tag = "3")]
2608    pub height: i32,
2609    /// (optional)
2610    #[prost(string, tag = "4")]
2611    pub filename_prefix: ::prost::alloc::string::String,
2612    /// (optional, default INDEX)
2613    #[prost(enumeration = "ImageFileSuffix", tag = "5")]
2614    pub filename_suffix: i32,
2615    /// (optional)
2616    #[prost(enumeration = "ImageCodec", tag = "6")]
2617    pub image_codec: i32,
2618    /// disable upload of manifest file (default false)
2619    #[prost(bool, tag = "7")]
2620    pub disable_manifest: bool,
2621    /// TODO: deprecate
2622    #[prost(oneof = "image_output::Output", tags = "8, 9, 10, 11")]
2623    pub output: ::core::option::Option<image_output::Output>,
2624}
2625/// Nested message and enum types in `ImageOutput`.
2626pub mod image_output {
2627    /// TODO: deprecate
2628    #[derive(Clone, PartialEq, ::prost::Oneof)]
2629    pub enum Output {
2630        #[prost(message, tag = "8")]
2631        S3(super::S3Upload),
2632        #[prost(message, tag = "9")]
2633        Gcp(super::GcpUpload),
2634        #[prost(message, tag = "10")]
2635        Azure(super::AzureBlobUpload),
2636        #[prost(message, tag = "11")]
2637        AliOss(super::AliOssUpload),
2638    }
2639}
2640// --- Storage ---
2641
2642#[derive(Clone, PartialEq, ::prost::Message)]
2643pub struct StorageConfig {
2644    #[prost(oneof = "storage_config::Provider", tags = "1, 2, 3, 4")]
2645    pub provider: ::core::option::Option<storage_config::Provider>,
2646}
2647/// Nested message and enum types in `StorageConfig`.
2648pub mod storage_config {
2649    #[derive(Clone, PartialEq, ::prost::Oneof)]
2650    pub enum Provider {
2651        #[prost(message, tag = "1")]
2652        S3(super::S3Upload),
2653        #[prost(message, tag = "2")]
2654        Gcp(super::GcpUpload),
2655        #[prost(message, tag = "3")]
2656        Azure(super::AzureBlobUpload),
2657        #[prost(message, tag = "4")]
2658        AliOss(super::AliOssUpload),
2659    }
2660}
2661#[derive(Clone, PartialEq, ::prost::Message)]
2662pub struct S3Upload {
2663    #[prost(string, tag = "1")]
2664    pub access_key: ::prost::alloc::string::String,
2665    #[prost(string, tag = "2")]
2666    pub secret: ::prost::alloc::string::String,
2667    #[prost(string, tag = "11")]
2668    pub session_token: ::prost::alloc::string::String,
2669    /// ARN of the role to assume for file upload. Egress will make an AssumeRole API call using the provided access_key and secret to assume that role. On LiveKit cloud, this is only available on accounts that have the feature enabled
2670    #[prost(string, tag = "12")]
2671    pub assume_role_arn: ::prost::alloc::string::String,
2672    /// ExternalID to use when assuming role for upload
2673    #[prost(string, tag = "13")]
2674    pub assume_role_external_id: ::prost::alloc::string::String,
2675    #[prost(string, tag = "3")]
2676    pub region: ::prost::alloc::string::String,
2677    #[prost(string, tag = "4")]
2678    pub endpoint: ::prost::alloc::string::String,
2679    #[prost(string, tag = "5")]
2680    pub bucket: ::prost::alloc::string::String,
2681    #[prost(bool, tag = "6")]
2682    pub force_path_style: bool,
2683    #[prost(map = "string, string", tag = "7")]
2684    pub metadata: ::std::collections::HashMap<::prost::alloc::string::String, ::prost::alloc::string::String>,
2685    #[prost(string, tag = "8")]
2686    pub tagging: ::prost::alloc::string::String,
2687    /// Content-Disposition header
2688    #[prost(string, tag = "9")]
2689    pub content_disposition: ::prost::alloc::string::String,
2690    #[prost(message, optional, tag = "10")]
2691    pub proxy: ::core::option::Option<ProxyConfig>,
2692}
2693#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
2694pub struct GcpUpload {
2695    /// service account credentials serialized in JSON "credentials.json"
2696    #[prost(string, tag = "1")]
2697    pub credentials: ::prost::alloc::string::String,
2698    #[prost(string, tag = "2")]
2699    pub bucket: ::prost::alloc::string::String,
2700    #[prost(message, optional, tag = "3")]
2701    pub proxy: ::core::option::Option<ProxyConfig>,
2702}
2703#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
2704pub struct AzureBlobUpload {
2705    #[prost(string, tag = "1")]
2706    pub account_name: ::prost::alloc::string::String,
2707    #[prost(string, tag = "2")]
2708    pub account_key: ::prost::alloc::string::String,
2709    #[prost(string, tag = "3")]
2710    pub container_name: ::prost::alloc::string::String,
2711}
2712#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
2713pub struct AliOssUpload {
2714    #[prost(string, tag = "1")]
2715    pub access_key: ::prost::alloc::string::String,
2716    #[prost(string, tag = "2")]
2717    pub secret: ::prost::alloc::string::String,
2718    #[prost(string, tag = "3")]
2719    pub region: ::prost::alloc::string::String,
2720    #[prost(string, tag = "4")]
2721    pub endpoint: ::prost::alloc::string::String,
2722    #[prost(string, tag = "5")]
2723    pub bucket: ::prost::alloc::string::String,
2724}
2725#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
2726pub struct ProxyConfig {
2727    #[prost(string, tag = "1")]
2728    pub url: ::prost::alloc::string::String,
2729    #[prost(string, tag = "2")]
2730    pub username: ::prost::alloc::string::String,
2731    #[prost(string, tag = "3")]
2732    pub password: ::prost::alloc::string::String,
2733}
2734// --- Control RPCs ---
2735
2736#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
2737pub struct ListEgressRequest {
2738    /// (optional, filter by room name)
2739    #[prost(string, tag = "1")]
2740    pub room_name: ::prost::alloc::string::String,
2741    /// (optional, filter by egress ID)
2742    #[prost(string, tag = "2")]
2743    pub egress_id: ::prost::alloc::string::String,
2744    /// (optional, list active egress only)
2745    #[prost(bool, tag = "3")]
2746    pub active: bool,
2747    /// next field id: 5
2748    #[prost(message, optional, tag = "4")]
2749    pub page_token: ::core::option::Option<TokenPagination>,
2750}
2751#[derive(Clone, PartialEq, ::prost::Message)]
2752pub struct ListEgressResponse {
2753    #[prost(message, repeated, tag = "1")]
2754    pub items: ::prost::alloc::vec::Vec<EgressInfo>,
2755    /// next field id: 3
2756    #[prost(message, optional, tag = "2")]
2757    pub next_page_token: ::core::option::Option<TokenPagination>,
2758}
2759#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
2760pub struct StopEgressRequest {
2761    #[prost(string, tag = "1")]
2762    pub egress_id: ::prost::alloc::string::String,
2763}
2764// --- Egress Info ---
2765
2766#[derive(Clone, PartialEq, ::prost::Message)]
2767pub struct EgressInfo {
2768    #[prost(string, tag = "1")]
2769    pub egress_id: ::prost::alloc::string::String,
2770    #[prost(string, tag = "2")]
2771    pub room_id: ::prost::alloc::string::String,
2772    #[prost(string, tag = "13")]
2773    pub room_name: ::prost::alloc::string::String,
2774    #[prost(enumeration = "EgressSourceType", tag = "26")]
2775    pub source_type: i32,
2776    #[prost(enumeration = "EgressStatus", tag = "3")]
2777    pub status: i32,
2778    #[prost(int64, tag = "10")]
2779    pub started_at: i64,
2780    #[prost(int64, tag = "11")]
2781    pub ended_at: i64,
2782    #[prost(int64, tag = "18")]
2783    pub updated_at: i64,
2784    #[prost(message, repeated, tag = "15")]
2785    pub stream_results: ::prost::alloc::vec::Vec<StreamInfo>,
2786    #[prost(message, repeated, tag = "16")]
2787    pub file_results: ::prost::alloc::vec::Vec<FileInfo>,
2788    #[prost(message, repeated, tag = "17")]
2789    pub segment_results: ::prost::alloc::vec::Vec<SegmentsInfo>,
2790    #[prost(message, repeated, tag = "20")]
2791    pub image_results: ::prost::alloc::vec::Vec<ImagesInfo>,
2792    #[prost(string, tag = "9")]
2793    pub error: ::prost::alloc::string::String,
2794    #[prost(int32, tag = "22")]
2795    pub error_code: i32,
2796    #[prost(string, tag = "21")]
2797    pub details: ::prost::alloc::string::String,
2798    #[prost(string, tag = "23")]
2799    pub manifest_location: ::prost::alloc::string::String,
2800    #[prost(bool, tag = "25")]
2801    pub backup_storage_used: bool,
2802    #[prost(int32, tag = "27")]
2803    pub retry_count: i32,
2804    #[prost(oneof = "egress_info::Request", tags = "29, 30, 4, 14, 19, 5, 6")]
2805    pub request: ::core::option::Option<egress_info::Request>,
2806    // next ID: 31
2807
2808    /// --- Deprecated ---
2809    #[prost(oneof = "egress_info::Result", tags = "7, 8, 12")]
2810    pub result: ::core::option::Option<egress_info::Result>,
2811}
2812/// Nested message and enum types in `EgressInfo`.
2813pub mod egress_info {
2814    #[derive(Clone, PartialEq, ::prost::Oneof)]
2815    pub enum Request {
2816        #[prost(message, tag = "29")]
2817        Egress(super::StartEgressRequest),
2818        #[prost(message, tag = "30")]
2819        Replay(super::ExportReplayRequest),
2820        /// TODO: deprecate
2821        #[prost(message, tag = "4")]
2822        RoomComposite(super::RoomCompositeEgressRequest),
2823        #[prost(message, tag = "14")]
2824        Web(super::WebEgressRequest),
2825        #[prost(message, tag = "19")]
2826        Participant(super::ParticipantEgressRequest),
2827        #[prost(message, tag = "5")]
2828        TrackComposite(super::TrackCompositeEgressRequest),
2829        #[prost(message, tag = "6")]
2830        Track(super::TrackEgressRequest),
2831    }
2832    // next ID: 31
2833
2834    /// --- Deprecated ---
2835    #[derive(Clone, PartialEq, ::prost::Oneof)]
2836    pub enum Result {
2837        #[deprecated]
2838        #[prost(message, tag = "7")]
2839        Stream(super::StreamInfoList),
2840        #[deprecated]
2841        #[prost(message, tag = "8")]
2842        File(super::FileInfo),
2843        #[deprecated]
2844        #[prost(message, tag = "12")]
2845        Segments(super::SegmentsInfo),
2846    }
2847}
2848#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
2849pub struct StreamInfo {
2850    #[prost(string, tag = "1")]
2851    pub url: ::prost::alloc::string::String,
2852    #[prost(int64, tag = "2")]
2853    pub started_at: i64,
2854    #[prost(int64, tag = "3")]
2855    pub ended_at: i64,
2856    #[prost(int64, tag = "4")]
2857    pub duration: i64,
2858    #[prost(enumeration = "stream_info::Status", tag = "5")]
2859    pub status: i32,
2860    #[prost(string, tag = "6")]
2861    pub error: ::prost::alloc::string::String,
2862    #[prost(int64, tag = "7")]
2863    pub last_retry_at: i64,
2864    #[prost(uint32, tag = "8")]
2865    pub retries: u32,
2866}
2867/// Nested message and enum types in `StreamInfo`.
2868pub mod stream_info {
2869    #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
2870    #[repr(i32)]
2871    pub enum Status {
2872        Active = 0,
2873        Finished = 1,
2874        Failed = 2,
2875    }
2876    impl Status {
2877        /// String value of the enum field names used in the ProtoBuf definition.
2878        ///
2879        /// The values are not transformed in any way and thus are considered stable
2880        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
2881        pub fn as_str_name(&self) -> &'static str {
2882            match self {
2883                Self::Active => "ACTIVE",
2884                Self::Finished => "FINISHED",
2885                Self::Failed => "FAILED",
2886            }
2887        }
2888        /// Creates an enum from field names used in the ProtoBuf definition.
2889        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
2890            match value {
2891                "ACTIVE" => Some(Self::Active),
2892                "FINISHED" => Some(Self::Finished),
2893                "FAILED" => Some(Self::Failed),
2894                _ => None,
2895            }
2896        }
2897    }
2898}
2899#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
2900pub struct FileInfo {
2901    #[prost(string, tag = "1")]
2902    pub filename: ::prost::alloc::string::String,
2903    #[prost(int64, tag = "2")]
2904    pub started_at: i64,
2905    #[prost(int64, tag = "3")]
2906    pub ended_at: i64,
2907    #[prost(int64, tag = "6")]
2908    pub duration: i64,
2909    #[prost(int64, tag = "4")]
2910    pub size: i64,
2911    #[prost(string, tag = "5")]
2912    pub location: ::prost::alloc::string::String,
2913}
2914#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
2915pub struct SegmentsInfo {
2916    #[prost(string, tag = "1")]
2917    pub playlist_name: ::prost::alloc::string::String,
2918    #[prost(string, tag = "8")]
2919    pub live_playlist_name: ::prost::alloc::string::String,
2920    #[prost(int64, tag = "2")]
2921    pub duration: i64,
2922    #[prost(int64, tag = "3")]
2923    pub size: i64,
2924    #[prost(string, tag = "4")]
2925    pub playlist_location: ::prost::alloc::string::String,
2926    #[prost(string, tag = "9")]
2927    pub live_playlist_location: ::prost::alloc::string::String,
2928    #[prost(int64, tag = "5")]
2929    pub segment_count: i64,
2930    #[prost(int64, tag = "6")]
2931    pub started_at: i64,
2932    #[prost(int64, tag = "7")]
2933    pub ended_at: i64,
2934}
2935#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
2936pub struct ImagesInfo {
2937    #[prost(string, tag = "4")]
2938    pub filename_prefix: ::prost::alloc::string::String,
2939    #[prost(int64, tag = "1")]
2940    pub image_count: i64,
2941    #[prost(int64, tag = "2")]
2942    pub started_at: i64,
2943    #[prost(int64, tag = "3")]
2944    pub ended_at: i64,
2945}
2946// --- Auto Egress ---
2947
2948#[derive(Clone, PartialEq, ::prost::Message)]
2949pub struct AutoParticipantEgress {
2950    #[prost(message, repeated, tag = "3")]
2951    pub file_outputs: ::prost::alloc::vec::Vec<EncodedFileOutput>,
2952    #[prost(message, repeated, tag = "4")]
2953    pub segment_outputs: ::prost::alloc::vec::Vec<SegmentedFileOutput>,
2954    #[prost(oneof = "auto_participant_egress::Options", tags = "1, 2")]
2955    pub options: ::core::option::Option<auto_participant_egress::Options>,
2956}
2957/// Nested message and enum types in `AutoParticipantEgress`.
2958pub mod auto_participant_egress {
2959    #[derive(Clone, Copy, PartialEq, ::prost::Oneof)]
2960    pub enum Options {
2961        /// (default H264_720P_30)
2962        #[prost(enumeration = "super::EncodingOptionsPreset", tag = "1")]
2963        Preset(i32),
2964        /// (optional)
2965        #[prost(message, tag = "2")]
2966        Advanced(super::EncodingOptions),
2967    }
2968}
2969#[derive(Clone, PartialEq, ::prost::Message)]
2970pub struct AutoTrackEgress {
2971    /// see docs for templating (default {track_id}-{time})
2972    #[prost(string, tag = "1")]
2973    pub filepath: ::prost::alloc::string::String,
2974    /// disables upload of json manifest file (default false)
2975    #[prost(bool, tag = "5")]
2976    pub disable_manifest: bool,
2977    #[prost(oneof = "auto_track_egress::Output", tags = "2, 3, 4, 6")]
2978    pub output: ::core::option::Option<auto_track_egress::Output>,
2979}
2980/// Nested message and enum types in `AutoTrackEgress`.
2981pub mod auto_track_egress {
2982    #[derive(Clone, PartialEq, ::prost::Oneof)]
2983    pub enum Output {
2984        #[prost(message, tag = "2")]
2985        S3(super::S3Upload),
2986        #[prost(message, tag = "3")]
2987        Gcp(super::GcpUpload),
2988        #[prost(message, tag = "4")]
2989        Azure(super::AzureBlobUpload),
2990        #[prost(message, tag = "6")]
2991        AliOss(super::AliOssUpload),
2992    }
2993}
2994// --- Replay Export (message only — RPC defined in cloud_replay.proto) ---
2995
2996#[derive(Clone, PartialEq, ::prost::Message)]
2997pub struct ExportReplayRequest {
2998    #[prost(string, tag = "1")]
2999    pub replay_id: ::prost::alloc::string::String,
3000    #[prost(int64, tag = "2")]
3001    pub start_offset_ms: i64,
3002    #[prost(int64, tag = "3")]
3003    pub end_offset_ms: i64,
3004    #[prost(message, repeated, tag = "9")]
3005    pub outputs: ::prost::alloc::vec::Vec<Output>,
3006    #[prost(message, optional, tag = "10")]
3007    pub storage: ::core::option::Option<StorageConfig>,
3008    #[prost(message, repeated, tag = "11")]
3009    pub webhooks: ::prost::alloc::vec::Vec<WebhookConfig>,
3010    #[prost(oneof = "export_replay_request::Source", tags = "4, 5, 6")]
3011    pub source: ::core::option::Option<export_replay_request::Source>,
3012    #[prost(oneof = "export_replay_request::Encoding", tags = "7, 8")]
3013    pub encoding: ::core::option::Option<export_replay_request::Encoding>,
3014}
3015/// Nested message and enum types in `ExportReplayRequest`.
3016pub mod export_replay_request {
3017    #[derive(Clone, PartialEq, ::prost::Oneof)]
3018    pub enum Source {
3019        #[prost(message, tag = "4")]
3020        Template(super::TemplateSource),
3021        #[prost(message, tag = "5")]
3022        Web(super::WebSource),
3023        #[prost(message, tag = "6")]
3024        Media(super::MediaSource),
3025    }
3026    #[derive(Clone, Copy, PartialEq, ::prost::Oneof)]
3027    pub enum Encoding {
3028        #[prost(enumeration = "super::EncodingOptionsPreset", tag = "7")]
3029        Preset(i32),
3030        #[prost(message, tag = "8")]
3031        Advanced(super::EncodingOptions),
3032    }
3033}
3034// TODO: deprecate --- V1 ---
3035
3036#[derive(Clone, PartialEq, ::prost::Message)]
3037pub struct RoomCompositeEgressRequest {
3038    #[prost(string, tag = "1")]
3039    pub room_name: ::prost::alloc::string::String,
3040    #[prost(string, tag = "2")]
3041    pub layout: ::prost::alloc::string::String,
3042    #[prost(bool, tag = "3")]
3043    pub audio_only: bool,
3044    #[prost(enumeration = "AudioMixing", tag = "15")]
3045    pub audio_mixing: i32,
3046    #[prost(bool, tag = "4")]
3047    pub video_only: bool,
3048    #[prost(string, tag = "5")]
3049    pub custom_base_url: ::prost::alloc::string::String,
3050    #[prost(message, repeated, tag = "11")]
3051    pub file_outputs: ::prost::alloc::vec::Vec<EncodedFileOutput>,
3052    #[prost(message, repeated, tag = "12")]
3053    pub stream_outputs: ::prost::alloc::vec::Vec<StreamOutput>,
3054    #[prost(message, repeated, tag = "13")]
3055    pub segment_outputs: ::prost::alloc::vec::Vec<SegmentedFileOutput>,
3056    #[prost(message, repeated, tag = "14")]
3057    pub image_outputs: ::prost::alloc::vec::Vec<ImageOutput>,
3058    #[prost(message, repeated, tag = "16")]
3059    pub webhooks: ::prost::alloc::vec::Vec<WebhookConfig>,
3060    #[prost(oneof = "room_composite_egress_request::Output", tags = "6, 7, 10")]
3061    pub output: ::core::option::Option<room_composite_egress_request::Output>,
3062    #[prost(oneof = "room_composite_egress_request::Options", tags = "8, 9")]
3063    pub options: ::core::option::Option<room_composite_egress_request::Options>,
3064}
3065/// Nested message and enum types in `RoomCompositeEgressRequest`.
3066pub mod room_composite_egress_request {
3067    #[derive(Clone, PartialEq, ::prost::Oneof)]
3068    pub enum Output {
3069        #[deprecated]
3070        #[prost(message, tag = "6")]
3071        File(super::EncodedFileOutput),
3072        #[deprecated]
3073        #[prost(message, tag = "7")]
3074        Stream(super::StreamOutput),
3075        #[deprecated]
3076        #[prost(message, tag = "10")]
3077        Segments(super::SegmentedFileOutput),
3078    }
3079    #[derive(Clone, Copy, PartialEq, ::prost::Oneof)]
3080    pub enum Options {
3081        #[prost(enumeration = "super::EncodingOptionsPreset", tag = "8")]
3082        Preset(i32),
3083        #[prost(message, tag = "9")]
3084        Advanced(super::EncodingOptions),
3085    }
3086}
3087#[derive(Clone, PartialEq, ::prost::Message)]
3088pub struct WebEgressRequest {
3089    #[prost(string, tag = "1")]
3090    pub url: ::prost::alloc::string::String,
3091    #[prost(bool, tag = "2")]
3092    pub audio_only: bool,
3093    #[prost(bool, tag = "3")]
3094    pub video_only: bool,
3095    #[prost(bool, tag = "12")]
3096    pub await_start_signal: bool,
3097    #[prost(message, repeated, tag = "9")]
3098    pub file_outputs: ::prost::alloc::vec::Vec<EncodedFileOutput>,
3099    #[prost(message, repeated, tag = "10")]
3100    pub stream_outputs: ::prost::alloc::vec::Vec<StreamOutput>,
3101    #[prost(message, repeated, tag = "11")]
3102    pub segment_outputs: ::prost::alloc::vec::Vec<SegmentedFileOutput>,
3103    #[prost(message, repeated, tag = "13")]
3104    pub image_outputs: ::prost::alloc::vec::Vec<ImageOutput>,
3105    #[prost(message, repeated, tag = "14")]
3106    pub webhooks: ::prost::alloc::vec::Vec<WebhookConfig>,
3107    #[prost(oneof = "web_egress_request::Output", tags = "4, 5, 6")]
3108    pub output: ::core::option::Option<web_egress_request::Output>,
3109    #[prost(oneof = "web_egress_request::Options", tags = "7, 8")]
3110    pub options: ::core::option::Option<web_egress_request::Options>,
3111}
3112/// Nested message and enum types in `WebEgressRequest`.
3113pub mod web_egress_request {
3114    #[derive(Clone, PartialEq, ::prost::Oneof)]
3115    pub enum Output {
3116        #[deprecated]
3117        #[prost(message, tag = "4")]
3118        File(super::EncodedFileOutput),
3119        #[deprecated]
3120        #[prost(message, tag = "5")]
3121        Stream(super::StreamOutput),
3122        #[deprecated]
3123        #[prost(message, tag = "6")]
3124        Segments(super::SegmentedFileOutput),
3125    }
3126    #[derive(Clone, Copy, PartialEq, ::prost::Oneof)]
3127    pub enum Options {
3128        #[prost(enumeration = "super::EncodingOptionsPreset", tag = "7")]
3129        Preset(i32),
3130        #[prost(message, tag = "8")]
3131        Advanced(super::EncodingOptions),
3132    }
3133}
3134#[derive(Clone, PartialEq, ::prost::Message)]
3135pub struct ParticipantEgressRequest {
3136    #[prost(string, tag = "1")]
3137    pub room_name: ::prost::alloc::string::String,
3138    #[prost(string, tag = "2")]
3139    pub identity: ::prost::alloc::string::String,
3140    #[prost(bool, tag = "3")]
3141    pub screen_share: bool,
3142    #[prost(message, repeated, tag = "6")]
3143    pub file_outputs: ::prost::alloc::vec::Vec<EncodedFileOutput>,
3144    #[prost(message, repeated, tag = "7")]
3145    pub stream_outputs: ::prost::alloc::vec::Vec<StreamOutput>,
3146    #[prost(message, repeated, tag = "8")]
3147    pub segment_outputs: ::prost::alloc::vec::Vec<SegmentedFileOutput>,
3148    #[prost(message, repeated, tag = "9")]
3149    pub image_outputs: ::prost::alloc::vec::Vec<ImageOutput>,
3150    #[prost(message, repeated, tag = "10")]
3151    pub webhooks: ::prost::alloc::vec::Vec<WebhookConfig>,
3152    #[prost(oneof = "participant_egress_request::Options", tags = "4, 5")]
3153    pub options: ::core::option::Option<participant_egress_request::Options>,
3154}
3155/// Nested message and enum types in `ParticipantEgressRequest`.
3156pub mod participant_egress_request {
3157    #[derive(Clone, Copy, PartialEq, ::prost::Oneof)]
3158    pub enum Options {
3159        #[prost(enumeration = "super::EncodingOptionsPreset", tag = "4")]
3160        Preset(i32),
3161        #[prost(message, tag = "5")]
3162        Advanced(super::EncodingOptions),
3163    }
3164}
3165#[derive(Clone, PartialEq, ::prost::Message)]
3166pub struct TrackCompositeEgressRequest {
3167    #[prost(string, tag = "1")]
3168    pub room_name: ::prost::alloc::string::String,
3169    #[prost(string, tag = "2")]
3170    pub audio_track_id: ::prost::alloc::string::String,
3171    #[prost(string, tag = "3")]
3172    pub video_track_id: ::prost::alloc::string::String,
3173    #[prost(message, repeated, tag = "11")]
3174    pub file_outputs: ::prost::alloc::vec::Vec<EncodedFileOutput>,
3175    #[prost(message, repeated, tag = "12")]
3176    pub stream_outputs: ::prost::alloc::vec::Vec<StreamOutput>,
3177    #[prost(message, repeated, tag = "13")]
3178    pub segment_outputs: ::prost::alloc::vec::Vec<SegmentedFileOutput>,
3179    #[prost(message, repeated, tag = "14")]
3180    pub image_outputs: ::prost::alloc::vec::Vec<ImageOutput>,
3181    #[prost(message, repeated, tag = "15")]
3182    pub webhooks: ::prost::alloc::vec::Vec<WebhookConfig>,
3183    #[prost(oneof = "track_composite_egress_request::Output", tags = "4, 5, 8")]
3184    pub output: ::core::option::Option<track_composite_egress_request::Output>,
3185    #[prost(oneof = "track_composite_egress_request::Options", tags = "6, 7")]
3186    pub options: ::core::option::Option<track_composite_egress_request::Options>,
3187}
3188/// Nested message and enum types in `TrackCompositeEgressRequest`.
3189pub mod track_composite_egress_request {
3190    #[derive(Clone, PartialEq, ::prost::Oneof)]
3191    pub enum Output {
3192        #[deprecated]
3193        #[prost(message, tag = "4")]
3194        File(super::EncodedFileOutput),
3195        #[deprecated]
3196        #[prost(message, tag = "5")]
3197        Stream(super::StreamOutput),
3198        #[deprecated]
3199        #[prost(message, tag = "8")]
3200        Segments(super::SegmentedFileOutput),
3201    }
3202    #[derive(Clone, Copy, PartialEq, ::prost::Oneof)]
3203    pub enum Options {
3204        #[prost(enumeration = "super::EncodingOptionsPreset", tag = "6")]
3205        Preset(i32),
3206        #[prost(message, tag = "7")]
3207        Advanced(super::EncodingOptions),
3208    }
3209}
3210#[derive(Clone, PartialEq, ::prost::Message)]
3211pub struct TrackEgressRequest {
3212    #[prost(string, tag = "1")]
3213    pub room_name: ::prost::alloc::string::String,
3214    #[prost(string, tag = "2")]
3215    pub track_id: ::prost::alloc::string::String,
3216    #[prost(message, repeated, tag = "5")]
3217    pub webhooks: ::prost::alloc::vec::Vec<WebhookConfig>,
3218    #[prost(oneof = "track_egress_request::Output", tags = "3, 4")]
3219    pub output: ::core::option::Option<track_egress_request::Output>,
3220}
3221/// Nested message and enum types in `TrackEgressRequest`.
3222pub mod track_egress_request {
3223    #[derive(Clone, PartialEq, ::prost::Oneof)]
3224    pub enum Output {
3225        #[prost(message, tag = "3")]
3226        File(super::DirectFileOutput),
3227        #[prost(string, tag = "4")]
3228        WebsocketUrl(::prost::alloc::string::String),
3229    }
3230}
3231#[derive(Clone, PartialEq, ::prost::Message)]
3232pub struct DirectFileOutput {
3233    #[prost(string, tag = "1")]
3234    pub filepath: ::prost::alloc::string::String,
3235    #[prost(bool, tag = "5")]
3236    pub disable_manifest: bool,
3237    #[prost(oneof = "direct_file_output::Output", tags = "2, 3, 4, 6")]
3238    pub output: ::core::option::Option<direct_file_output::Output>,
3239}
3240/// Nested message and enum types in `DirectFileOutput`.
3241pub mod direct_file_output {
3242    #[derive(Clone, PartialEq, ::prost::Oneof)]
3243    pub enum Output {
3244        #[prost(message, tag = "2")]
3245        S3(super::S3Upload),
3246        #[prost(message, tag = "3")]
3247        Gcp(super::GcpUpload),
3248        #[prost(message, tag = "4")]
3249        Azure(super::AzureBlobUpload),
3250        #[prost(message, tag = "6")]
3251        AliOss(super::AliOssUpload),
3252    }
3253}
3254#[derive(Clone, PartialEq, ::prost::Message)]
3255pub struct EncodedFileOutput {
3256    #[prost(enumeration = "EncodedFileType", tag = "1")]
3257    pub file_type: i32,
3258    #[prost(string, tag = "2")]
3259    pub filepath: ::prost::alloc::string::String,
3260    #[prost(bool, tag = "6")]
3261    pub disable_manifest: bool,
3262    #[prost(oneof = "encoded_file_output::Output", tags = "3, 4, 5, 7")]
3263    pub output: ::core::option::Option<encoded_file_output::Output>,
3264}
3265/// Nested message and enum types in `EncodedFileOutput`.
3266pub mod encoded_file_output {
3267    #[derive(Clone, PartialEq, ::prost::Oneof)]
3268    pub enum Output {
3269        #[prost(message, tag = "3")]
3270        S3(super::S3Upload),
3271        #[prost(message, tag = "4")]
3272        Gcp(super::GcpUpload),
3273        #[prost(message, tag = "5")]
3274        Azure(super::AzureBlobUpload),
3275        #[prost(message, tag = "7")]
3276        AliOss(super::AliOssUpload),
3277    }
3278}
3279#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
3280pub struct UpdateLayoutRequest {
3281    #[prost(string, tag = "1")]
3282    pub egress_id: ::prost::alloc::string::String,
3283    #[prost(string, tag = "2")]
3284    pub layout: ::prost::alloc::string::String,
3285}
3286#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
3287pub struct UpdateStreamRequest {
3288    #[prost(string, tag = "1")]
3289    pub egress_id: ::prost::alloc::string::String,
3290    #[prost(string, repeated, tag = "2")]
3291    pub add_output_urls: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
3292    #[prost(string, repeated, tag = "3")]
3293    pub remove_output_urls: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
3294}
3295#[derive(Clone, PartialEq, ::prost::Message)]
3296pub struct StreamInfoList {
3297    #[prost(message, repeated, tag = "1")]
3298    pub info: ::prost::alloc::vec::Vec<StreamInfo>,
3299}
3300#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
3301#[repr(i32)]
3302pub enum AudioChannel {
3303    Both = 0,
3304    Left = 1,
3305    Right = 2,
3306}
3307impl AudioChannel {
3308    /// String value of the enum field names used in the ProtoBuf definition.
3309    ///
3310    /// The values are not transformed in any way and thus are considered stable
3311    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
3312    pub fn as_str_name(&self) -> &'static str {
3313        match self {
3314            Self::Both => "AUDIO_CHANNEL_BOTH",
3315            Self::Left => "AUDIO_CHANNEL_LEFT",
3316            Self::Right => "AUDIO_CHANNEL_RIGHT",
3317        }
3318    }
3319    /// Creates an enum from field names used in the ProtoBuf definition.
3320    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
3321        match value {
3322            "AUDIO_CHANNEL_BOTH" => Some(Self::Both),
3323            "AUDIO_CHANNEL_LEFT" => Some(Self::Left),
3324            "AUDIO_CHANNEL_RIGHT" => Some(Self::Right),
3325            _ => None,
3326        }
3327    }
3328}
3329// --- Encoding ---
3330
3331#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
3332#[repr(i32)]
3333pub enum EncodingOptionsPreset {
3334    ///   1280x720, 30fps, 3000kpbs, H.264_MAIN / OPUS
3335    H264720p30 = 0,
3336    ///   1280x720, 60fps, 4500kbps, H.264_MAIN / OPUS
3337    H264720p60 = 1,
3338    /// 1920x1080, 30fps, 4500kbps, H.264_MAIN / OPUS
3339    H2641080p30 = 2,
3340    /// 1920x1080, 60fps, 6000kbps, H.264_MAIN / OPUS
3341    H2641080p60 = 3,
3342    ///   720x1280, 30fps, 3000kpbs, H.264_MAIN / OPUS
3343    PortraitH264720p30 = 4,
3344    ///   720x1280, 60fps, 4500kbps, H.264_MAIN / OPUS
3345    PortraitH264720p60 = 5,
3346    /// 1080x1920, 30fps, 4500kbps, H.264_MAIN / OPUS
3347    PortraitH2641080p30 = 6,
3348    /// 1080x1920, 60fps, 6000kbps, H.264_MAIN / OPUS
3349    PortraitH2641080p60 = 7,
3350    /// Skip transcoding. Valid only when specifying a single track with MediaSource
3351    Passthrough = 8,
3352}
3353impl EncodingOptionsPreset {
3354    /// String value of the enum field names used in the ProtoBuf definition.
3355    ///
3356    /// The values are not transformed in any way and thus are considered stable
3357    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
3358    pub fn as_str_name(&self) -> &'static str {
3359        match self {
3360            Self::H264720p30 => "H264_720P_30",
3361            Self::H264720p60 => "H264_720P_60",
3362            Self::H2641080p30 => "H264_1080P_30",
3363            Self::H2641080p60 => "H264_1080P_60",
3364            Self::PortraitH264720p30 => "PORTRAIT_H264_720P_30",
3365            Self::PortraitH264720p60 => "PORTRAIT_H264_720P_60",
3366            Self::PortraitH2641080p30 => "PORTRAIT_H264_1080P_30",
3367            Self::PortraitH2641080p60 => "PORTRAIT_H264_1080P_60",
3368            Self::Passthrough => "PASSTHROUGH",
3369        }
3370    }
3371    /// Creates an enum from field names used in the ProtoBuf definition.
3372    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
3373        match value {
3374            "H264_720P_30" => Some(Self::H264720p30),
3375            "H264_720P_60" => Some(Self::H264720p60),
3376            "H264_1080P_30" => Some(Self::H2641080p30),
3377            "H264_1080P_60" => Some(Self::H2641080p60),
3378            "PORTRAIT_H264_720P_30" => Some(Self::PortraitH264720p30),
3379            "PORTRAIT_H264_720P_60" => Some(Self::PortraitH264720p60),
3380            "PORTRAIT_H264_1080P_30" => Some(Self::PortraitH2641080p30),
3381            "PORTRAIT_H264_1080P_60" => Some(Self::PortraitH2641080p60),
3382            "PASSTHROUGH" => Some(Self::Passthrough),
3383            _ => None,
3384        }
3385    }
3386}
3387#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
3388#[repr(i32)]
3389pub enum EncodedFileType {
3390    /// file type chosen based on codecs
3391    DefaultFiletype = 0,
3392    Mp4 = 1,
3393    Ogg = 2,
3394    Mp3 = 3,
3395}
3396impl EncodedFileType {
3397    /// String value of the enum field names used in the ProtoBuf definition.
3398    ///
3399    /// The values are not transformed in any way and thus are considered stable
3400    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
3401    pub fn as_str_name(&self) -> &'static str {
3402        match self {
3403            Self::DefaultFiletype => "DEFAULT_FILETYPE",
3404            Self::Mp4 => "MP4",
3405            Self::Ogg => "OGG",
3406            Self::Mp3 => "MP3",
3407        }
3408    }
3409    /// Creates an enum from field names used in the ProtoBuf definition.
3410    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
3411        match value {
3412            "DEFAULT_FILETYPE" => Some(Self::DefaultFiletype),
3413            "MP4" => Some(Self::Mp4),
3414            "OGG" => Some(Self::Ogg),
3415            "MP3" => Some(Self::Mp3),
3416            _ => None,
3417        }
3418    }
3419}
3420#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
3421#[repr(i32)]
3422pub enum StreamProtocol {
3423    /// protocol chosen based on urls
3424    DefaultProtocol = 0,
3425    Rtmp = 1,
3426    Srt = 2,
3427    Websocket = 3,
3428}
3429impl StreamProtocol {
3430    /// String value of the enum field names used in the ProtoBuf definition.
3431    ///
3432    /// The values are not transformed in any way and thus are considered stable
3433    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
3434    pub fn as_str_name(&self) -> &'static str {
3435        match self {
3436            Self::DefaultProtocol => "DEFAULT_PROTOCOL",
3437            Self::Rtmp => "RTMP",
3438            Self::Srt => "SRT",
3439            Self::Websocket => "WEBSOCKET",
3440        }
3441    }
3442    /// Creates an enum from field names used in the ProtoBuf definition.
3443    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
3444        match value {
3445            "DEFAULT_PROTOCOL" => Some(Self::DefaultProtocol),
3446            "RTMP" => Some(Self::Rtmp),
3447            "SRT" => Some(Self::Srt),
3448            "WEBSOCKET" => Some(Self::Websocket),
3449            _ => None,
3450        }
3451    }
3452}
3453#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
3454#[repr(i32)]
3455pub enum SegmentedFileProtocol {
3456    DefaultSegmentedFileProtocol = 0,
3457    HlsProtocol = 1,
3458}
3459impl SegmentedFileProtocol {
3460    /// String value of the enum field names used in the ProtoBuf definition.
3461    ///
3462    /// The values are not transformed in any way and thus are considered stable
3463    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
3464    pub fn as_str_name(&self) -> &'static str {
3465        match self {
3466            Self::DefaultSegmentedFileProtocol => "DEFAULT_SEGMENTED_FILE_PROTOCOL",
3467            Self::HlsProtocol => "HLS_PROTOCOL",
3468        }
3469    }
3470    /// Creates an enum from field names used in the ProtoBuf definition.
3471    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
3472        match value {
3473            "DEFAULT_SEGMENTED_FILE_PROTOCOL" => Some(Self::DefaultSegmentedFileProtocol),
3474            "HLS_PROTOCOL" => Some(Self::HlsProtocol),
3475            _ => None,
3476        }
3477    }
3478}
3479#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
3480#[repr(i32)]
3481pub enum SegmentedFileSuffix {
3482    Index = 0,
3483    Timestamp = 1,
3484}
3485impl SegmentedFileSuffix {
3486    /// String value of the enum field names used in the ProtoBuf definition.
3487    ///
3488    /// The values are not transformed in any way and thus are considered stable
3489    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
3490    pub fn as_str_name(&self) -> &'static str {
3491        match self {
3492            Self::Index => "INDEX",
3493            Self::Timestamp => "TIMESTAMP",
3494        }
3495    }
3496    /// Creates an enum from field names used in the ProtoBuf definition.
3497    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
3498        match value {
3499            "INDEX" => Some(Self::Index),
3500            "TIMESTAMP" => Some(Self::Timestamp),
3501            _ => None,
3502        }
3503    }
3504}
3505#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
3506#[repr(i32)]
3507pub enum ImageFileSuffix {
3508    ImageSuffixIndex = 0,
3509    ImageSuffixTimestamp = 1,
3510    /// Do not append any suffix and overwrite the existing image with the latest
3511    ImageSuffixNoneOverwrite = 2,
3512}
3513impl ImageFileSuffix {
3514    /// String value of the enum field names used in the ProtoBuf definition.
3515    ///
3516    /// The values are not transformed in any way and thus are considered stable
3517    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
3518    pub fn as_str_name(&self) -> &'static str {
3519        match self {
3520            Self::ImageSuffixIndex => "IMAGE_SUFFIX_INDEX",
3521            Self::ImageSuffixTimestamp => "IMAGE_SUFFIX_TIMESTAMP",
3522            Self::ImageSuffixNoneOverwrite => "IMAGE_SUFFIX_NONE_OVERWRITE",
3523        }
3524    }
3525    /// Creates an enum from field names used in the ProtoBuf definition.
3526    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
3527        match value {
3528            "IMAGE_SUFFIX_INDEX" => Some(Self::ImageSuffixIndex),
3529            "IMAGE_SUFFIX_TIMESTAMP" => Some(Self::ImageSuffixTimestamp),
3530            "IMAGE_SUFFIX_NONE_OVERWRITE" => Some(Self::ImageSuffixNoneOverwrite),
3531            _ => None,
3532        }
3533    }
3534}
3535#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
3536#[repr(i32)]
3537pub enum EgressSourceType {
3538    Web = 0,
3539    Sdk = 1,
3540}
3541impl EgressSourceType {
3542    /// String value of the enum field names used in the ProtoBuf definition.
3543    ///
3544    /// The values are not transformed in any way and thus are considered stable
3545    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
3546    pub fn as_str_name(&self) -> &'static str {
3547        match self {
3548            Self::Web => "EGRESS_SOURCE_TYPE_WEB",
3549            Self::Sdk => "EGRESS_SOURCE_TYPE_SDK",
3550        }
3551    }
3552    /// Creates an enum from field names used in the ProtoBuf definition.
3553    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
3554        match value {
3555            "EGRESS_SOURCE_TYPE_WEB" => Some(Self::Web),
3556            "EGRESS_SOURCE_TYPE_SDK" => Some(Self::Sdk),
3557            _ => None,
3558        }
3559    }
3560}
3561#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
3562#[repr(i32)]
3563pub enum EgressStatus {
3564    EgressStarting = 0,
3565    EgressActive = 1,
3566    EgressEnding = 2,
3567    EgressComplete = 3,
3568    EgressFailed = 4,
3569    EgressAborted = 5,
3570    EgressLimitReached = 6,
3571}
3572impl EgressStatus {
3573    /// String value of the enum field names used in the ProtoBuf definition.
3574    ///
3575    /// The values are not transformed in any way and thus are considered stable
3576    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
3577    pub fn as_str_name(&self) -> &'static str {
3578        match self {
3579            Self::EgressStarting => "EGRESS_STARTING",
3580            Self::EgressActive => "EGRESS_ACTIVE",
3581            Self::EgressEnding => "EGRESS_ENDING",
3582            Self::EgressComplete => "EGRESS_COMPLETE",
3583            Self::EgressFailed => "EGRESS_FAILED",
3584            Self::EgressAborted => "EGRESS_ABORTED",
3585            Self::EgressLimitReached => "EGRESS_LIMIT_REACHED",
3586        }
3587    }
3588    /// Creates an enum from field names used in the ProtoBuf definition.
3589    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
3590        match value {
3591            "EGRESS_STARTING" => Some(Self::EgressStarting),
3592            "EGRESS_ACTIVE" => Some(Self::EgressActive),
3593            "EGRESS_ENDING" => Some(Self::EgressEnding),
3594            "EGRESS_COMPLETE" => Some(Self::EgressComplete),
3595            "EGRESS_FAILED" => Some(Self::EgressFailed),
3596            "EGRESS_ABORTED" => Some(Self::EgressAborted),
3597            "EGRESS_LIMIT_REACHED" => Some(Self::EgressLimitReached),
3598            _ => None,
3599        }
3600    }
3601}
3602#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
3603#[repr(i32)]
3604pub enum AudioMixing {
3605    DefaultMixing = 0,
3606    DualChannelAgent = 1,
3607    DualChannelAlternate = 2,
3608}
3609impl AudioMixing {
3610    /// String value of the enum field names used in the ProtoBuf definition.
3611    ///
3612    /// The values are not transformed in any way and thus are considered stable
3613    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
3614    pub fn as_str_name(&self) -> &'static str {
3615        match self {
3616            Self::DefaultMixing => "DEFAULT_MIXING",
3617            Self::DualChannelAgent => "DUAL_CHANNEL_AGENT",
3618            Self::DualChannelAlternate => "DUAL_CHANNEL_ALTERNATE",
3619        }
3620    }
3621    /// Creates an enum from field names used in the ProtoBuf definition.
3622    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
3623        match value {
3624            "DEFAULT_MIXING" => Some(Self::DefaultMixing),
3625            "DUAL_CHANNEL_AGENT" => Some(Self::DualChannelAgent),
3626            "DUAL_CHANNEL_ALTERNATE" => Some(Self::DualChannelAlternate),
3627            _ => None,
3628        }
3629    }
3630}
3631#[derive(Clone, PartialEq, ::prost::Message)]
3632pub struct SignalRequest {
3633    #[prost(oneof = "signal_request::Message", tags = "1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23")]
3634    pub message: ::core::option::Option<signal_request::Message>,
3635}
3636/// Nested message and enum types in `SignalRequest`.
3637pub mod signal_request {
3638    #[derive(Clone, PartialEq, ::prost::Oneof)]
3639    pub enum Message {
3640        /// participant offer for publisher
3641        #[prost(message, tag = "1")]
3642        Offer(super::SessionDescription),
3643        /// participant answering subscriber offer
3644        #[prost(message, tag = "2")]
3645        Answer(super::SessionDescription),
3646        #[prost(message, tag = "3")]
3647        Trickle(super::TrickleRequest),
3648        #[prost(message, tag = "4")]
3649        AddTrack(super::AddTrackRequest),
3650        /// mute the participant's published tracks
3651        #[prost(message, tag = "5")]
3652        Mute(super::MuteTrackRequest),
3653        /// Subscribe or unsubscribe from tracks
3654        #[prost(message, tag = "6")]
3655        Subscription(super::UpdateSubscription),
3656        /// Update settings of subscribed tracks
3657        #[prost(message, tag = "7")]
3658        TrackSetting(super::UpdateTrackSettings),
3659        /// Immediately terminate session
3660        #[prost(message, tag = "8")]
3661        Leave(super::LeaveRequest),
3662        /// Update published video layers
3663        #[deprecated]
3664        #[prost(message, tag = "10")]
3665        UpdateLayers(super::UpdateVideoLayers),
3666        /// Update subscriber permissions
3667        #[prost(message, tag = "11")]
3668        SubscriptionPermission(super::SubscriptionPermission),
3669        /// sync client's subscribe state to server during reconnect
3670        #[prost(message, tag = "12")]
3671        SyncState(super::SyncState),
3672        /// Simulate conditions, for client validations
3673        #[prost(message, tag = "13")]
3674        Simulate(super::SimulateScenario),
3675        /// client triggered ping to server
3676        ///
3677        /// deprecated by ping_req (message Ping)
3678        #[prost(int64, tag = "14")]
3679        Ping(i64),
3680        /// update a participant's own metadata, name, or attributes
3681        /// requires canUpdateOwnParticipantMetadata permission
3682        #[prost(message, tag = "15")]
3683        UpdateMetadata(super::UpdateParticipantMetadata),
3684        #[prost(message, tag = "16")]
3685        PingReq(super::Ping),
3686        /// Update local audio track settings
3687        #[prost(message, tag = "17")]
3688        UpdateAudioTrack(super::UpdateLocalAudioTrack),
3689        /// Update local video track settings
3690        #[prost(message, tag = "18")]
3691        UpdateVideoTrack(super::UpdateLocalVideoTrack),
3692        /// Publish a data track
3693        #[prost(message, tag = "19")]
3694        PublishDataTrackRequest(super::PublishDataTrackRequest),
3695        /// Unpublish a data track
3696        #[prost(message, tag = "20")]
3697        UnpublishDataTrackRequest(super::UnpublishDataTrackRequest),
3698        /// Update subscription state for one or more data tracks
3699        #[prost(message, tag = "21")]
3700        UpdateDataSubscription(super::UpdateDataSubscription),
3701        /// Store a data blob.
3702        #[prost(message, tag = "22")]
3703        StoreDataBlobRequest(super::StoreDataBlobRequest),
3704        /// Retrieve a stored data blob.
3705        #[prost(message, tag = "23")]
3706        GetDataBlobRequest(super::GetDataBlobRequest),
3707    }
3708}
3709#[derive(Clone, PartialEq, ::prost::Message)]
3710pub struct SignalResponse {
3711    #[prost(oneof = "signal_response::Message", tags = "1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31")]
3712    pub message: ::core::option::Option<signal_response::Message>,
3713}
3714/// Nested message and enum types in `SignalResponse`.
3715pub mod signal_response {
3716    #[derive(Clone, PartialEq, ::prost::Oneof)]
3717    pub enum Message {
3718        /// sent when join is accepted
3719        #[prost(message, tag = "1")]
3720        Join(super::JoinResponse),
3721        /// sent when server answers publisher
3722        #[prost(message, tag = "2")]
3723        Answer(super::SessionDescription),
3724        /// sent when server is sending subscriber an offer
3725        #[prost(message, tag = "3")]
3726        Offer(super::SessionDescription),
3727        /// sent when an ICE candidate is available
3728        #[prost(message, tag = "4")]
3729        Trickle(super::TrickleRequest),
3730        /// sent when participants in the room has changed
3731        #[prost(message, tag = "5")]
3732        Update(super::ParticipantUpdate),
3733        /// sent to the participant when their track has been published
3734        #[prost(message, tag = "6")]
3735        TrackPublished(super::TrackPublishedResponse),
3736        /// Immediately terminate session
3737        #[prost(message, tag = "8")]
3738        Leave(super::LeaveRequest),
3739        /// server initiated mute
3740        #[prost(message, tag = "9")]
3741        Mute(super::MuteTrackRequest),
3742        /// indicates changes to speaker status, including when they've gone to not speaking
3743        #[prost(message, tag = "10")]
3744        SpeakersChanged(super::SpeakersChanged),
3745        /// sent when metadata of the room has changed
3746        #[prost(message, tag = "11")]
3747        RoomUpdate(super::RoomUpdate),
3748        /// when connection quality changed
3749        #[prost(message, tag = "12")]
3750        ConnectionQuality(super::ConnectionQualityUpdate),
3751        /// when streamed tracks state changed, used to notify when any of the streams were paused due to
3752        /// congestion
3753        #[prost(message, tag = "13")]
3754        StreamStateUpdate(super::StreamStateUpdate),
3755        /// when max subscribe quality changed, used by dynamic broadcasting to disable unused layers
3756        #[prost(message, tag = "14")]
3757        SubscribedQualityUpdate(super::SubscribedQualityUpdate),
3758        /// when subscription permission changed
3759        #[prost(message, tag = "15")]
3760        SubscriptionPermissionUpdate(super::SubscriptionPermissionUpdate),
3761        /// update the token the client was using, to prevent an active client from using an expired token
3762        #[prost(string, tag = "16")]
3763        RefreshToken(::prost::alloc::string::String),
3764        /// server initiated track unpublish
3765        #[prost(message, tag = "17")]
3766        TrackUnpublished(super::TrackUnpublishedResponse),
3767        /// respond to ping
3768        ///
3769        /// deprecated by pong_resp (message Pong)
3770        #[prost(int64, tag = "18")]
3771        Pong(i64),
3772        /// sent when client reconnects
3773        #[prost(message, tag = "19")]
3774        Reconnect(super::ReconnectResponse),
3775        /// respond to Ping
3776        #[prost(message, tag = "20")]
3777        PongResp(super::Pong),
3778        /// Subscription response, client should not expect any media from this subscription if it fails
3779        #[prost(message, tag = "21")]
3780        SubscriptionResponse(super::SubscriptionResponse),
3781        /// Response relating to user inititated requests that carry a `request_id`
3782        #[prost(message, tag = "22")]
3783        RequestResponse(super::RequestResponse),
3784        /// notify to the publisher when a published track has been subscribed for the first time
3785        #[prost(message, tag = "23")]
3786        TrackSubscribed(super::TrackSubscribed),
3787        /// notify to the participant when they have been moved to a new room
3788        #[prost(message, tag = "24")]
3789        RoomMoved(super::RoomMovedResponse),
3790        /// notify number of required media sections to satisfy subscribed tracks
3791        #[prost(message, tag = "25")]
3792        MediaSectionsRequirement(super::MediaSectionsRequirement),
3793        /// when audio subscription changes, used to enable simulcasting of audio codecs based on subscriptions
3794        #[prost(message, tag = "26")]
3795        SubscribedAudioCodecUpdate(super::SubscribedAudioCodecUpdate),
3796        /// Sent in response to `PublishDataTrackRequest`.
3797        #[prost(message, tag = "27")]
3798        PublishDataTrackResponse(super::PublishDataTrackResponse),
3799        /// Sent in response to `UnpublishDataTrackRequest` or SFU-initiated unpublish.
3800        #[prost(message, tag = "28")]
3801        UnpublishDataTrackResponse(super::UnpublishDataTrackResponse),
3802        /// Sent to data track subscribers to provide mapping from track SIDs to handles.
3803        #[prost(message, tag = "29")]
3804        DataTrackSubscriberHandles(super::DataTrackSubscriberHandles),
3805        /// Sent in response to `StoreDataBlobRequest`.
3806        #[prost(message, tag = "30")]
3807        StoreDataBlobResponse(super::StoreDataBlobResponse),
3808        /// Sent in response to `GetDataBlobRequest`.
3809        #[prost(message, tag = "31")]
3810        GetDataBlobResponse(super::GetDataBlobResponse),
3811    }
3812}
3813#[derive(Clone, PartialEq, ::prost::Message)]
3814pub struct SimulcastCodec {
3815    #[prost(string, tag = "1")]
3816    pub codec: ::prost::alloc::string::String,
3817    #[prost(string, tag = "2")]
3818    pub cid: ::prost::alloc::string::String,
3819    #[prost(message, repeated, tag = "4")]
3820    pub layers: ::prost::alloc::vec::Vec<VideoLayer>,
3821    #[prost(enumeration = "video_layer::Mode", tag = "5")]
3822    pub video_layer_mode: i32,
3823}
3824#[derive(Clone, PartialEq, ::prost::Message)]
3825pub struct AddTrackRequest {
3826    /// client ID of track, to match it when RTC track is received
3827    #[prost(string, tag = "1")]
3828    pub cid: ::prost::alloc::string::String,
3829    #[prost(string, tag = "2")]
3830    pub name: ::prost::alloc::string::String,
3831    #[prost(enumeration = "TrackType", tag = "3")]
3832    pub r#type: i32,
3833    #[prost(uint32, tag = "4")]
3834    pub width: u32,
3835    #[prost(uint32, tag = "5")]
3836    pub height: u32,
3837    /// true to add track and initialize to muted
3838    #[prost(bool, tag = "6")]
3839    pub muted: bool,
3840    /// true if DTX (Discontinuous Transmission) is disabled for audio
3841    ///
3842    /// deprecated in favor of audio_features
3843    #[deprecated]
3844    #[prost(bool, tag = "7")]
3845    pub disable_dtx: bool,
3846    #[prost(enumeration = "TrackSource", tag = "8")]
3847    pub source: i32,
3848    #[prost(message, repeated, tag = "9")]
3849    pub layers: ::prost::alloc::vec::Vec<VideoLayer>,
3850    #[prost(message, repeated, tag = "10")]
3851    pub simulcast_codecs: ::prost::alloc::vec::Vec<SimulcastCodec>,
3852    /// server ID of track, publish new codec to exist track
3853    #[prost(string, tag = "11")]
3854    pub sid: ::prost::alloc::string::String,
3855    /// deprecated in favor of audio_features
3856    #[deprecated]
3857    #[prost(bool, tag = "12")]
3858    pub stereo: bool,
3859    /// true if RED (Redundant Encoding) is disabled for audio
3860    #[prost(bool, tag = "13")]
3861    pub disable_red: bool,
3862    #[prost(enumeration = "encryption::Type", tag = "14")]
3863    pub encryption: i32,
3864    /// which stream the track belongs to, used to group tracks together.
3865    /// if not specified, server will infer it from track source to bundle camera/microphone, screenshare/audio together
3866    #[prost(string, tag = "15")]
3867    pub stream: ::prost::alloc::string::String,
3868    #[prost(enumeration = "BackupCodecPolicy", tag = "16")]
3869    pub backup_codec_policy: i32,
3870    #[prost(enumeration = "AudioTrackFeature", repeated, tag = "17")]
3871    pub audio_features: ::prost::alloc::vec::Vec<i32>,
3872    #[prost(enumeration = "PacketTrailerFeature", repeated, tag = "18")]
3873    pub packet_trailer_features: ::prost::alloc::vec::Vec<i32>,
3874}
3875#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
3876pub struct PublishDataTrackRequest {
3877    /// Client-assigned, 16-bit identifier that will be attached to packets sent by the publisher.
3878    /// This must be non-zero and unique for each data track published by the publisher.
3879    #[prost(uint32, tag = "1")]
3880    pub pub_handle: u32,
3881    /// Human-readable identifier (e.g., `geoLocation`, `servoPosition.x`, etc.), unique per publisher.
3882    /// This must be non-empty and no longer than 256 characters.
3883    #[prost(string, tag = "2")]
3884    pub name: ::prost::alloc::string::String,
3885    /// Method used for end-to-end encryption (E2EE) on frame payloads.
3886    #[prost(enumeration = "encryption::Type", tag = "3")]
3887    pub encryption: i32,
3888    /// Encoding for frame payloads on this track. If unspecified, the track is untyped.
3889    #[prost(message, optional, tag = "4")]
3890    pub frame_encoding: ::core::option::Option<DataTrackFrameEncoding>,
3891    /// ID of the schema used by frames on this track if the track is typed.
3892    /// If set, the associated schema must be stored with `StoreDataBlobRequest`.
3893    #[prost(message, optional, tag = "5")]
3894    pub schema: ::core::option::Option<DataTrackSchemaId>,
3895}
3896#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
3897pub struct PublishDataTrackResponse {
3898    /// Information about the published track.
3899    #[prost(message, optional, tag = "1")]
3900    pub info: ::core::option::Option<DataTrackInfo>,
3901}
3902#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
3903pub struct UnpublishDataTrackRequest {
3904    /// Publisher handle of the track to unpublish.
3905    #[prost(uint32, tag = "1")]
3906    pub pub_handle: u32,
3907}
3908#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
3909pub struct UnpublishDataTrackResponse {
3910    /// Information about the unpublished track.
3911    #[prost(message, optional, tag = "1")]
3912    pub info: ::core::option::Option<DataTrackInfo>,
3913}
3914#[derive(Clone, PartialEq, ::prost::Message)]
3915pub struct DataTrackSubscriberHandles {
3916    /// Maps handles from incoming packets to the track SIDs that the packets belong to.
3917    #[prost(map = "uint32, message", tag = "1")]
3918    pub sub_handles: ::std::collections::HashMap<u32, data_track_subscriber_handles::PublishedDataTrack>,
3919}
3920/// Nested message and enum types in `DataTrackSubscriberHandles`.
3921pub mod data_track_subscriber_handles {
3922    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
3923    pub struct PublishedDataTrack {
3924        #[prost(string, tag = "1")]
3925        pub publisher_identity: ::prost::alloc::string::String,
3926        #[prost(string, tag = "2")]
3927        pub publisher_sid: ::prost::alloc::string::String,
3928        #[prost(string, tag = "3")]
3929        pub track_sid: ::prost::alloc::string::String,
3930    }
3931}
3932#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
3933pub struct TrickleRequest {
3934    #[prost(string, tag = "1")]
3935    pub candidate_init: ::prost::alloc::string::String,
3936    #[prost(enumeration = "SignalTarget", tag = "2")]
3937    pub target: i32,
3938    #[prost(bool, tag = "3")]
3939    pub r#final: bool,
3940}
3941#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
3942pub struct MuteTrackRequest {
3943    #[prost(string, tag = "1")]
3944    pub sid: ::prost::alloc::string::String,
3945    #[prost(bool, tag = "2")]
3946    pub muted: bool,
3947}
3948#[derive(Clone, PartialEq, ::prost::Message)]
3949pub struct JoinResponse {
3950    #[prost(message, optional, tag = "1")]
3951    pub room: ::core::option::Option<Room>,
3952    #[prost(message, optional, tag = "2")]
3953    pub participant: ::core::option::Option<ParticipantInfo>,
3954    #[prost(message, repeated, tag = "3")]
3955    pub other_participants: ::prost::alloc::vec::Vec<ParticipantInfo>,
3956    /// deprecated. use server_info.version instead.
3957    #[prost(string, tag = "4")]
3958    pub server_version: ::prost::alloc::string::String,
3959    #[prost(message, repeated, tag = "5")]
3960    pub ice_servers: ::prost::alloc::vec::Vec<IceServer>,
3961    /// use subscriber as the primary PeerConnection
3962    #[prost(bool, tag = "6")]
3963    pub subscriber_primary: bool,
3964    /// when the current server isn't available, return alternate url to retry connection
3965    /// when this is set, the other fields will be largely empty
3966    #[prost(string, tag = "7")]
3967    pub alternative_url: ::prost::alloc::string::String,
3968    #[prost(message, optional, tag = "8")]
3969    pub client_configuration: ::core::option::Option<ClientConfiguration>,
3970    /// deprecated. use server_info.region instead.
3971    #[prost(string, tag = "9")]
3972    pub server_region: ::prost::alloc::string::String,
3973    #[prost(int32, tag = "10")]
3974    pub ping_timeout: i32,
3975    #[prost(int32, tag = "11")]
3976    pub ping_interval: i32,
3977    #[prost(message, optional, tag = "12")]
3978    pub server_info: ::core::option::Option<ServerInfo>,
3979    /// Server-Injected-Frame byte trailer, used to identify unencrypted frames when e2ee is enabled
3980    #[prost(bytes = "vec", tag = "13")]
3981    pub sif_trailer: ::prost::alloc::vec::Vec<u8>,
3982    #[prost(message, repeated, tag = "14")]
3983    pub enabled_publish_codecs: ::prost::alloc::vec::Vec<Codec>,
3984    /// when set, client should attempt to establish publish peer connection when joining room to speed up publishing
3985    #[prost(bool, tag = "15")]
3986    pub fast_publish: bool,
3987}
3988#[derive(Clone, PartialEq, ::prost::Message)]
3989pub struct ReconnectResponse {
3990    #[prost(message, repeated, tag = "1")]
3991    pub ice_servers: ::prost::alloc::vec::Vec<IceServer>,
3992    #[prost(message, optional, tag = "2")]
3993    pub client_configuration: ::core::option::Option<ClientConfiguration>,
3994    #[prost(message, optional, tag = "3")]
3995    pub server_info: ::core::option::Option<ServerInfo>,
3996    /// last sequence number of reliable message received before resuming
3997    #[prost(uint32, tag = "4")]
3998    pub last_message_seq: u32,
3999}
4000#[derive(Clone, PartialEq, ::prost::Message)]
4001pub struct TrackPublishedResponse {
4002    #[prost(string, tag = "1")]
4003    pub cid: ::prost::alloc::string::String,
4004    #[prost(message, optional, tag = "2")]
4005    pub track: ::core::option::Option<TrackInfo>,
4006}
4007#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
4008pub struct TrackUnpublishedResponse {
4009    #[prost(string, tag = "1")]
4010    pub track_sid: ::prost::alloc::string::String,
4011}
4012#[derive(Clone, PartialEq, ::prost::Message)]
4013pub struct SessionDescription {
4014    /// "answer" | "offer" | "pranswer" | "rollback"
4015    #[prost(string, tag = "1")]
4016    pub r#type: ::prost::alloc::string::String,
4017    #[prost(string, tag = "2")]
4018    pub sdp: ::prost::alloc::string::String,
4019    #[prost(uint32, tag = "3")]
4020    pub id: u32,
4021    #[prost(map = "string, string", tag = "4")]
4022    pub mid_to_track_id: ::std::collections::HashMap<::prost::alloc::string::String, ::prost::alloc::string::String>,
4023}
4024#[derive(Clone, PartialEq, ::prost::Message)]
4025pub struct ParticipantUpdate {
4026    #[prost(message, repeated, tag = "1")]
4027    pub participants: ::prost::alloc::vec::Vec<ParticipantInfo>,
4028}
4029#[derive(Clone, PartialEq, ::prost::Message)]
4030pub struct UpdateSubscription {
4031    #[prost(string, repeated, tag = "1")]
4032    pub track_sids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
4033    #[prost(bool, tag = "2")]
4034    pub subscribe: bool,
4035    #[prost(message, repeated, tag = "3")]
4036    pub participant_tracks: ::prost::alloc::vec::Vec<ParticipantTracks>,
4037}
4038#[derive(Clone, PartialEq, ::prost::Message)]
4039pub struct UpdateDataSubscription {
4040    #[prost(message, repeated, tag = "1")]
4041    pub updates: ::prost::alloc::vec::Vec<update_data_subscription::Update>,
4042}
4043/// Nested message and enum types in `UpdateDataSubscription`.
4044pub mod update_data_subscription {
4045    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
4046    pub struct Update {
4047        #[prost(string, tag = "1")]
4048        pub track_sid: ::prost::alloc::string::String,
4049        #[prost(bool, tag = "2")]
4050        pub subscribe: bool,
4051        /// Options to apply when initially subscribing or updating an existing subscription.
4052        /// When unsubscribing, this field is ignored.
4053        #[prost(message, optional, tag = "3")]
4054        pub options: ::core::option::Option<super::DataTrackSubscriptionOptions>,
4055    }
4056}
4057#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
4058pub struct StoreDataBlobRequest {
4059    #[prost(uint32, tag = "1")]
4060    pub request_id: u32,
4061    #[prost(message, optional, tag = "2")]
4062    pub blob: ::core::option::Option<DataBlob>,
4063}
4064#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
4065pub struct StoreDataBlobResponse {
4066    #[prost(uint32, tag = "1")]
4067    pub request_id: u32,
4068    /// Unique key the data blob was stored under.
4069    #[prost(message, optional, tag = "2")]
4070    pub key: ::core::option::Option<DataBlobKey>,
4071}
4072#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
4073pub struct GetDataBlobRequest {
4074    #[prost(uint32, tag = "1")]
4075    pub request_id: u32,
4076    /// Identity of the participant who owns the blob.
4077    #[prost(string, tag = "2")]
4078    pub participant_identity: ::prost::alloc::string::String,
4079    /// Unique key of the data blob to retrieve.
4080    #[prost(message, optional, tag = "3")]
4081    pub key: ::core::option::Option<DataBlobKey>,
4082}
4083#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
4084pub struct GetDataBlobResponse {
4085    #[prost(uint32, tag = "1")]
4086    pub request_id: u32,
4087    #[prost(message, optional, tag = "2")]
4088    pub blob: ::core::option::Option<DataBlob>,
4089}
4090#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
4091pub struct UpdateTrackSettings {
4092    #[prost(string, repeated, tag = "1")]
4093    pub track_sids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
4094    /// when true, the track is placed in a paused state, with no new data returned
4095    #[prost(bool, tag = "3")]
4096    pub disabled: bool,
4097    /// deprecated in favor of width & height
4098    #[prost(enumeration = "VideoQuality", tag = "4")]
4099    pub quality: i32,
4100    /// for video, width to receive
4101    #[prost(uint32, tag = "5")]
4102    pub width: u32,
4103    /// for video, height to receive
4104    #[prost(uint32, tag = "6")]
4105    pub height: u32,
4106    #[prost(uint32, tag = "7")]
4107    pub fps: u32,
4108    /// subscription priority. 1 being the highest (0 is unset)
4109    /// when unset, server sill assign priority based on the order of subscription
4110    /// server will use priority in the following ways:
4111    /// 1. when subscribed tracks exceed per-participant subscription limit, server will
4112    ///     pause the lowest priority tracks
4113    /// 2. when the network is congested, server will assign available bandwidth to
4114    ///     higher priority tracks first. lowest priority tracks can be paused
4115    #[prost(uint32, tag = "8")]
4116    pub priority: u32,
4117}
4118#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
4119pub struct UpdateLocalAudioTrack {
4120    #[prost(string, tag = "1")]
4121    pub track_sid: ::prost::alloc::string::String,
4122    #[prost(enumeration = "AudioTrackFeature", repeated, tag = "2")]
4123    pub features: ::prost::alloc::vec::Vec<i32>,
4124}
4125#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
4126pub struct UpdateLocalVideoTrack {
4127    #[prost(string, tag = "1")]
4128    pub track_sid: ::prost::alloc::string::String,
4129    #[prost(uint32, tag = "2")]
4130    pub width: u32,
4131    #[prost(uint32, tag = "3")]
4132    pub height: u32,
4133}
4134#[derive(Clone, PartialEq, ::prost::Message)]
4135pub struct LeaveRequest {
4136    /// sent when server initiates the disconnect due to server-restart
4137    /// indicates clients should attempt full-reconnect sequence
4138    /// NOTE: `can_reconnect` obsoleted by `action` starting in protocol version 13
4139    #[prost(bool, tag = "1")]
4140    pub can_reconnect: bool,
4141    #[prost(enumeration = "DisconnectReason", tag = "2")]
4142    pub reason: i32,
4143    #[prost(enumeration = "leave_request::Action", tag = "3")]
4144    pub action: i32,
4145    #[prost(message, optional, tag = "4")]
4146    pub regions: ::core::option::Option<RegionSettings>,
4147}
4148/// Nested message and enum types in `LeaveRequest`.
4149pub mod leave_request {
4150    /// indicates action clients should take on receiving this message
4151    #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
4152    #[repr(i32)]
4153    pub enum Action {
4154        /// should disconnect
4155        Disconnect = 0,
4156        /// should attempt a resume with `reconnect=1` in join URL
4157        Resume = 1,
4158        /// should attempt a reconnect, i. e. no `reconnect=1`
4159        Reconnect = 2,
4160    }
4161    impl Action {
4162        /// String value of the enum field names used in the ProtoBuf definition.
4163        ///
4164        /// The values are not transformed in any way and thus are considered stable
4165        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
4166        pub fn as_str_name(&self) -> &'static str {
4167            match self {
4168                Self::Disconnect => "DISCONNECT",
4169                Self::Resume => "RESUME",
4170                Self::Reconnect => "RECONNECT",
4171            }
4172        }
4173        /// Creates an enum from field names used in the ProtoBuf definition.
4174        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
4175            match value {
4176                "DISCONNECT" => Some(Self::Disconnect),
4177                "RESUME" => Some(Self::Resume),
4178                "RECONNECT" => Some(Self::Reconnect),
4179                _ => None,
4180            }
4181        }
4182    }
4183}
4184/// message to indicate published video track dimensions are changing
4185#[derive(Clone, PartialEq, ::prost::Message)]
4186pub struct UpdateVideoLayers {
4187    #[prost(string, tag = "1")]
4188    pub track_sid: ::prost::alloc::string::String,
4189    #[prost(message, repeated, tag = "2")]
4190    pub layers: ::prost::alloc::vec::Vec<VideoLayer>,
4191}
4192#[derive(Clone, PartialEq, ::prost::Message)]
4193pub struct UpdateParticipantMetadata {
4194    #[prost(string, tag = "1")]
4195    pub metadata: ::prost::alloc::string::String,
4196    #[prost(string, tag = "2")]
4197    pub name: ::prost::alloc::string::String,
4198    /// attributes to update. it only updates attributes that have been set
4199    /// to delete attributes, set the value to an empty string
4200    #[prost(map = "string, string", tag = "3")]
4201    pub attributes: ::std::collections::HashMap<::prost::alloc::string::String, ::prost::alloc::string::String>,
4202    #[prost(uint32, tag = "4")]
4203    pub request_id: u32,
4204}
4205#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
4206pub struct IceServer {
4207    #[prost(string, repeated, tag = "1")]
4208    pub urls: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
4209    #[prost(string, tag = "2")]
4210    pub username: ::prost::alloc::string::String,
4211    #[prost(string, tag = "3")]
4212    pub credential: ::prost::alloc::string::String,
4213}
4214#[derive(Clone, PartialEq, ::prost::Message)]
4215pub struct SpeakersChanged {
4216    #[prost(message, repeated, tag = "1")]
4217    pub speakers: ::prost::alloc::vec::Vec<SpeakerInfo>,
4218}
4219#[derive(Clone, PartialEq, ::prost::Message)]
4220pub struct RoomUpdate {
4221    #[prost(message, optional, tag = "1")]
4222    pub room: ::core::option::Option<Room>,
4223}
4224#[derive(Clone, PartialEq, ::prost::Message)]
4225pub struct ConnectionQualityInfo {
4226    #[prost(string, tag = "1")]
4227    pub participant_sid: ::prost::alloc::string::String,
4228    #[prost(enumeration = "ConnectionQuality", tag = "2")]
4229    pub quality: i32,
4230    #[prost(float, tag = "3")]
4231    pub score: f32,
4232}
4233#[derive(Clone, PartialEq, ::prost::Message)]
4234pub struct ConnectionQualityUpdate {
4235    #[prost(message, repeated, tag = "1")]
4236    pub updates: ::prost::alloc::vec::Vec<ConnectionQualityInfo>,
4237}
4238#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
4239pub struct StreamStateInfo {
4240    #[prost(string, tag = "1")]
4241    pub participant_sid: ::prost::alloc::string::String,
4242    #[prost(string, tag = "2")]
4243    pub track_sid: ::prost::alloc::string::String,
4244    #[prost(enumeration = "StreamState", tag = "3")]
4245    pub state: i32,
4246}
4247#[derive(Clone, PartialEq, ::prost::Message)]
4248pub struct StreamStateUpdate {
4249    #[prost(message, repeated, tag = "1")]
4250    pub stream_states: ::prost::alloc::vec::Vec<StreamStateInfo>,
4251}
4252#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
4253pub struct SubscribedQuality {
4254    #[prost(enumeration = "VideoQuality", tag = "1")]
4255    pub quality: i32,
4256    #[prost(bool, tag = "2")]
4257    pub enabled: bool,
4258}
4259#[derive(Clone, PartialEq, ::prost::Message)]
4260pub struct SubscribedCodec {
4261    #[prost(string, tag = "1")]
4262    pub codec: ::prost::alloc::string::String,
4263    #[prost(message, repeated, tag = "2")]
4264    pub qualities: ::prost::alloc::vec::Vec<SubscribedQuality>,
4265}
4266#[derive(Clone, PartialEq, ::prost::Message)]
4267pub struct SubscribedQualityUpdate {
4268    #[prost(string, tag = "1")]
4269    pub track_sid: ::prost::alloc::string::String,
4270    #[deprecated]
4271    #[prost(message, repeated, tag = "2")]
4272    pub subscribed_qualities: ::prost::alloc::vec::Vec<SubscribedQuality>,
4273    #[prost(message, repeated, tag = "3")]
4274    pub subscribed_codecs: ::prost::alloc::vec::Vec<SubscribedCodec>,
4275}
4276#[derive(Clone, PartialEq, ::prost::Message)]
4277pub struct SubscribedAudioCodecUpdate {
4278    #[prost(string, tag = "1")]
4279    pub track_sid: ::prost::alloc::string::String,
4280    #[prost(message, repeated, tag = "2")]
4281    pub subscribed_audio_codecs: ::prost::alloc::vec::Vec<SubscribedAudioCodec>,
4282}
4283#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
4284pub struct TrackPermission {
4285    /// permission could be granted either by participant sid or identity
4286    #[prost(string, tag = "1")]
4287    pub participant_sid: ::prost::alloc::string::String,
4288    #[prost(bool, tag = "2")]
4289    pub all_tracks: bool,
4290    #[prost(string, repeated, tag = "3")]
4291    pub track_sids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
4292    #[prost(string, tag = "4")]
4293    pub participant_identity: ::prost::alloc::string::String,
4294}
4295#[derive(Clone, PartialEq, ::prost::Message)]
4296pub struct SubscriptionPermission {
4297    #[prost(bool, tag = "1")]
4298    pub all_participants: bool,
4299    #[prost(message, repeated, tag = "2")]
4300    pub track_permissions: ::prost::alloc::vec::Vec<TrackPermission>,
4301}
4302#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
4303pub struct SubscriptionPermissionUpdate {
4304    #[prost(string, tag = "1")]
4305    pub participant_sid: ::prost::alloc::string::String,
4306    #[prost(string, tag = "2")]
4307    pub track_sid: ::prost::alloc::string::String,
4308    #[prost(bool, tag = "3")]
4309    pub allowed: bool,
4310}
4311#[derive(Clone, PartialEq, ::prost::Message)]
4312pub struct RoomMovedResponse {
4313    /// information about the new room
4314    #[prost(message, optional, tag = "1")]
4315    pub room: ::core::option::Option<Room>,
4316    /// new reconnect token that can be used to reconnect to the new room
4317    #[prost(string, tag = "2")]
4318    pub token: ::prost::alloc::string::String,
4319    #[prost(message, optional, tag = "3")]
4320    pub participant: ::core::option::Option<ParticipantInfo>,
4321    #[prost(message, repeated, tag = "4")]
4322    pub other_participants: ::prost::alloc::vec::Vec<ParticipantInfo>,
4323}
4324#[derive(Clone, PartialEq, ::prost::Message)]
4325pub struct SyncState {
4326    /// last subscribe/publish answer before reconnecting
4327    /// subscribe answer if using dual peer connection
4328    /// publish answer if using single peer connection
4329    #[prost(message, optional, tag = "1")]
4330    pub answer: ::core::option::Option<SessionDescription>,
4331    #[prost(message, optional, tag = "2")]
4332    pub subscription: ::core::option::Option<UpdateSubscription>,
4333    #[prost(message, repeated, tag = "3")]
4334    pub publish_tracks: ::prost::alloc::vec::Vec<TrackPublishedResponse>,
4335    #[prost(message, repeated, tag = "4")]
4336    pub data_channels: ::prost::alloc::vec::Vec<DataChannelInfo>,
4337    /// last received server side offer/sent client side offer before reconnecting
4338    /// received server side offer if using dual peer connection
4339    /// sent client side offer if using single peer connection
4340    #[prost(message, optional, tag = "5")]
4341    pub offer: ::core::option::Option<SessionDescription>,
4342    #[prost(string, repeated, tag = "6")]
4343    pub track_sids_disabled: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
4344    #[prost(message, repeated, tag = "7")]
4345    pub datachannel_receive_states: ::prost::alloc::vec::Vec<DataChannelReceiveState>,
4346    #[prost(message, repeated, tag = "8")]
4347    pub publish_data_tracks: ::prost::alloc::vec::Vec<PublishDataTrackResponse>,
4348    #[prost(message, optional, tag = "9")]
4349    pub data_subscription: ::core::option::Option<UpdateDataSubscription>,
4350}
4351#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
4352pub struct DataChannelReceiveState {
4353    #[prost(string, tag = "1")]
4354    pub publisher_sid: ::prost::alloc::string::String,
4355    #[prost(uint32, tag = "2")]
4356    pub last_seq: u32,
4357}
4358#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
4359pub struct DataChannelInfo {
4360    #[prost(string, tag = "1")]
4361    pub label: ::prost::alloc::string::String,
4362    #[prost(uint32, tag = "2")]
4363    pub id: u32,
4364    #[prost(enumeration = "SignalTarget", tag = "3")]
4365    pub target: i32,
4366}
4367#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
4368pub struct SimulateScenario {
4369    #[prost(oneof = "simulate_scenario::Scenario", tags = "1, 2, 3, 4, 5, 6, 7, 8, 9")]
4370    pub scenario: ::core::option::Option<simulate_scenario::Scenario>,
4371}
4372/// Nested message and enum types in `SimulateScenario`.
4373pub mod simulate_scenario {
4374    #[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Oneof)]
4375    pub enum Scenario {
4376        /// simulate N seconds of speaker activity
4377        #[prost(int32, tag = "1")]
4378        SpeakerUpdate(i32),
4379        /// simulate local node failure
4380        #[prost(bool, tag = "2")]
4381        NodeFailure(bool),
4382        /// simulate migration
4383        #[prost(bool, tag = "3")]
4384        Migration(bool),
4385        /// server to send leave
4386        #[prost(bool, tag = "4")]
4387        ServerLeave(bool),
4388        /// switch candidate protocol to tcp
4389        #[prost(enumeration = "super::CandidateProtocol", tag = "5")]
4390        SwitchCandidateProtocol(i32),
4391        /// maximum bandwidth for subscribers, in bps
4392        /// when zero, clears artificial bandwidth limit
4393        #[prost(int64, tag = "6")]
4394        SubscriberBandwidth(i64),
4395        /// disconnect signal on resume
4396        #[prost(bool, tag = "7")]
4397        DisconnectSignalOnResume(bool),
4398        /// disconnect signal on resume before sending any messages from server
4399        #[prost(bool, tag = "8")]
4400        DisconnectSignalOnResumeNoMessages(bool),
4401        /// full reconnect leave request
4402        #[prost(bool, tag = "9")]
4403        LeaveRequestFullReconnect(bool),
4404    }
4405}
4406#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
4407pub struct Ping {
4408    #[prost(int64, tag = "1")]
4409    pub timestamp: i64,
4410    /// rtt in milliseconds calculated by client
4411    #[prost(int64, tag = "2")]
4412    pub rtt: i64,
4413}
4414#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
4415pub struct Pong {
4416    /// timestamp field of last received ping request
4417    #[prost(int64, tag = "1")]
4418    pub last_ping_timestamp: i64,
4419    #[prost(int64, tag = "2")]
4420    pub timestamp: i64,
4421}
4422#[derive(Clone, PartialEq, ::prost::Message)]
4423pub struct RegionSettings {
4424    #[prost(message, repeated, tag = "1")]
4425    pub regions: ::prost::alloc::vec::Vec<RegionInfo>,
4426}
4427#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
4428pub struct RegionInfo {
4429    #[prost(string, tag = "1")]
4430    pub region: ::prost::alloc::string::String,
4431    #[prost(string, tag = "2")]
4432    pub url: ::prost::alloc::string::String,
4433    #[prost(int64, tag = "3")]
4434    pub distance: i64,
4435}
4436#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
4437pub struct SubscriptionResponse {
4438    #[prost(string, tag = "1")]
4439    pub track_sid: ::prost::alloc::string::String,
4440    #[prost(enumeration = "SubscriptionError", tag = "2")]
4441    pub err: i32,
4442}
4443#[derive(Clone, PartialEq, ::prost::Message)]
4444pub struct RequestResponse {
4445    #[prost(uint32, tag = "1")]
4446    pub request_id: u32,
4447    #[prost(enumeration = "request_response::Reason", tag = "2")]
4448    pub reason: i32,
4449    #[prost(string, tag = "3")]
4450    pub message: ::prost::alloc::string::String,
4451    #[prost(oneof = "request_response::Request", tags = "4, 5, 6, 7, 8, 9, 10, 11")]
4452    pub request: ::core::option::Option<request_response::Request>,
4453}
4454/// Nested message and enum types in `RequestResponse`.
4455pub mod request_response {
4456    #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
4457    #[repr(i32)]
4458    pub enum Reason {
4459        Ok = 0,
4460        NotFound = 1,
4461        NotAllowed = 2,
4462        LimitExceeded = 3,
4463        Queued = 4,
4464        UnsupportedType = 5,
4465        UnclassifiedError = 6,
4466        InvalidHandle = 7,
4467        InvalidName = 8,
4468        DuplicateHandle = 9,
4469        DuplicateName = 10,
4470        InvalidRequest = 11,
4471    }
4472    impl Reason {
4473        /// String value of the enum field names used in the ProtoBuf definition.
4474        ///
4475        /// The values are not transformed in any way and thus are considered stable
4476        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
4477        pub fn as_str_name(&self) -> &'static str {
4478            match self {
4479                Self::Ok => "OK",
4480                Self::NotFound => "NOT_FOUND",
4481                Self::NotAllowed => "NOT_ALLOWED",
4482                Self::LimitExceeded => "LIMIT_EXCEEDED",
4483                Self::Queued => "QUEUED",
4484                Self::UnsupportedType => "UNSUPPORTED_TYPE",
4485                Self::UnclassifiedError => "UNCLASSIFIED_ERROR",
4486                Self::InvalidHandle => "INVALID_HANDLE",
4487                Self::InvalidName => "INVALID_NAME",
4488                Self::DuplicateHandle => "DUPLICATE_HANDLE",
4489                Self::DuplicateName => "DUPLICATE_NAME",
4490                Self::InvalidRequest => "INVALID_REQUEST",
4491            }
4492        }
4493        /// Creates an enum from field names used in the ProtoBuf definition.
4494        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
4495            match value {
4496                "OK" => Some(Self::Ok),
4497                "NOT_FOUND" => Some(Self::NotFound),
4498                "NOT_ALLOWED" => Some(Self::NotAllowed),
4499                "LIMIT_EXCEEDED" => Some(Self::LimitExceeded),
4500                "QUEUED" => Some(Self::Queued),
4501                "UNSUPPORTED_TYPE" => Some(Self::UnsupportedType),
4502                "UNCLASSIFIED_ERROR" => Some(Self::UnclassifiedError),
4503                "INVALID_HANDLE" => Some(Self::InvalidHandle),
4504                "INVALID_NAME" => Some(Self::InvalidName),
4505                "DUPLICATE_HANDLE" => Some(Self::DuplicateHandle),
4506                "DUPLICATE_NAME" => Some(Self::DuplicateName),
4507                "INVALID_REQUEST" => Some(Self::InvalidRequest),
4508                _ => None,
4509            }
4510        }
4511    }
4512    #[derive(Clone, PartialEq, ::prost::Oneof)]
4513    pub enum Request {
4514        #[prost(message, tag = "4")]
4515        Trickle(super::TrickleRequest),
4516        #[prost(message, tag = "5")]
4517        AddTrack(super::AddTrackRequest),
4518        #[prost(message, tag = "6")]
4519        Mute(super::MuteTrackRequest),
4520        #[prost(message, tag = "7")]
4521        UpdateMetadata(super::UpdateParticipantMetadata),
4522        #[prost(message, tag = "8")]
4523        UpdateAudioTrack(super::UpdateLocalAudioTrack),
4524        #[prost(message, tag = "9")]
4525        UpdateVideoTrack(super::UpdateLocalVideoTrack),
4526        #[prost(message, tag = "10")]
4527        PublishDataTrack(super::PublishDataTrackRequest),
4528        #[prost(message, tag = "11")]
4529        UnpublishDataTrack(super::UnpublishDataTrackRequest),
4530    }
4531}
4532#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
4533pub struct TrackSubscribed {
4534    #[prost(string, tag = "1")]
4535    pub track_sid: ::prost::alloc::string::String,
4536}
4537#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
4538pub struct ConnectionSettings {
4539    #[prost(bool, tag = "1")]
4540    pub auto_subscribe: bool,
4541    #[prost(bool, tag = "2")]
4542    pub adaptive_stream: bool,
4543    #[prost(bool, optional, tag = "3")]
4544    pub subscriber_allow_pause: ::core::option::Option<bool>,
4545    #[prost(bool, tag = "4")]
4546    pub disable_ice_lite: bool,
4547    #[prost(bool, optional, tag = "5")]
4548    pub auto_subscribe_data_track: ::core::option::Option<bool>,
4549}
4550#[derive(Clone, PartialEq, ::prost::Message)]
4551pub struct JoinRequest {
4552    #[prost(message, optional, tag = "1")]
4553    pub client_info: ::core::option::Option<ClientInfo>,
4554    #[prost(message, optional, tag = "2")]
4555    pub connection_settings: ::core::option::Option<ConnectionSettings>,
4556    /// if not empty, will overwrite `metadata` in token
4557    #[prost(string, tag = "3")]
4558    pub metadata: ::prost::alloc::string::String,
4559    /// will set keys provided via this
4560    /// will overwrite if the same key is in the token
4561    /// will not delete keys from token if there is a key collision and this sets that key to empty value
4562    #[prost(map = "string, string", tag = "4")]
4563    pub participant_attributes: ::std::collections::HashMap<::prost::alloc::string::String, ::prost::alloc::string::String>,
4564    #[prost(message, repeated, tag = "5")]
4565    pub add_track_requests: ::prost::alloc::vec::Vec<AddTrackRequest>,
4566    #[prost(message, optional, tag = "6")]
4567    pub publisher_offer: ::core::option::Option<SessionDescription>,
4568    #[prost(bool, tag = "7")]
4569    pub reconnect: bool,
4570    #[prost(enumeration = "ReconnectReason", tag = "8")]
4571    pub reconnect_reason: i32,
4572    #[prost(string, tag = "9")]
4573    pub participant_sid: ::prost::alloc::string::String,
4574    #[prost(message, optional, tag = "10")]
4575    pub sync_state: ::core::option::Option<SyncState>,
4576}
4577#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
4578pub struct WrappedJoinRequest {
4579    #[prost(enumeration = "wrapped_join_request::Compression", tag = "1")]
4580    pub compression: i32,
4581    /// marshalled JoinRequest + potentially compressed
4582    #[prost(bytes = "vec", tag = "2")]
4583    pub join_request: ::prost::alloc::vec::Vec<u8>,
4584}
4585/// Nested message and enum types in `WrappedJoinRequest`.
4586pub mod wrapped_join_request {
4587    #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
4588    #[repr(i32)]
4589    pub enum Compression {
4590        None = 0,
4591        Gzip = 1,
4592    }
4593    impl Compression {
4594        /// String value of the enum field names used in the ProtoBuf definition.
4595        ///
4596        /// The values are not transformed in any way and thus are considered stable
4597        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
4598        pub fn as_str_name(&self) -> &'static str {
4599            match self {
4600                Self::None => "NONE",
4601                Self::Gzip => "GZIP",
4602            }
4603        }
4604        /// Creates an enum from field names used in the ProtoBuf definition.
4605        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
4606            match value {
4607                "NONE" => Some(Self::None),
4608                "GZIP" => Some(Self::Gzip),
4609                _ => None,
4610            }
4611        }
4612    }
4613}
4614#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
4615pub struct MediaSectionsRequirement {
4616    #[prost(uint32, tag = "1")]
4617    pub num_audios: u32,
4618    #[prost(uint32, tag = "2")]
4619    pub num_videos: u32,
4620}
4621#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
4622#[repr(i32)]
4623pub enum SignalTarget {
4624    Publisher = 0,
4625    Subscriber = 1,
4626}
4627impl SignalTarget {
4628    /// String value of the enum field names used in the ProtoBuf definition.
4629    ///
4630    /// The values are not transformed in any way and thus are considered stable
4631    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
4632    pub fn as_str_name(&self) -> &'static str {
4633        match self {
4634            Self::Publisher => "PUBLISHER",
4635            Self::Subscriber => "SUBSCRIBER",
4636        }
4637    }
4638    /// Creates an enum from field names used in the ProtoBuf definition.
4639    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
4640        match value {
4641            "PUBLISHER" => Some(Self::Publisher),
4642            "SUBSCRIBER" => Some(Self::Subscriber),
4643            _ => None,
4644        }
4645    }
4646}
4647#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
4648#[repr(i32)]
4649pub enum StreamState {
4650    Active = 0,
4651    Paused = 1,
4652}
4653impl StreamState {
4654    /// String value of the enum field names used in the ProtoBuf definition.
4655    ///
4656    /// The values are not transformed in any way and thus are considered stable
4657    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
4658    pub fn as_str_name(&self) -> &'static str {
4659        match self {
4660            Self::Active => "ACTIVE",
4661            Self::Paused => "PAUSED",
4662        }
4663    }
4664    /// Creates an enum from field names used in the ProtoBuf definition.
4665    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
4666        match value {
4667            "ACTIVE" => Some(Self::Active),
4668            "PAUSED" => Some(Self::Paused),
4669            _ => None,
4670        }
4671    }
4672}
4673#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
4674#[repr(i32)]
4675pub enum CandidateProtocol {
4676    Udp = 0,
4677    Tcp = 1,
4678    Tls = 2,
4679}
4680impl CandidateProtocol {
4681    /// String value of the enum field names used in the ProtoBuf definition.
4682    ///
4683    /// The values are not transformed in any way and thus are considered stable
4684    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
4685    pub fn as_str_name(&self) -> &'static str {
4686        match self {
4687            Self::Udp => "UDP",
4688            Self::Tcp => "TCP",
4689            Self::Tls => "TLS",
4690        }
4691    }
4692    /// Creates an enum from field names used in the ProtoBuf definition.
4693    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
4694        match value {
4695            "UDP" => Some(Self::Udp),
4696            "TCP" => Some(Self::Tcp),
4697            "TLS" => Some(Self::Tls),
4698            _ => None,
4699        }
4700    }
4701}
4702#[derive(Clone, PartialEq, ::prost::Message)]
4703pub struct Job {
4704    #[prost(string, tag = "1")]
4705    pub id: ::prost::alloc::string::String,
4706    #[prost(string, tag = "9")]
4707    pub dispatch_id: ::prost::alloc::string::String,
4708    #[prost(enumeration = "JobType", tag = "2")]
4709    pub r#type: i32,
4710    #[prost(message, optional, tag = "3")]
4711    pub room: ::core::option::Option<Room>,
4712    #[prost(message, optional, tag = "4")]
4713    pub participant: ::core::option::Option<ParticipantInfo>,
4714    #[deprecated]
4715    #[prost(string, tag = "5")]
4716    pub namespace: ::prost::alloc::string::String,
4717    #[prost(string, tag = "6")]
4718    pub metadata: ::prost::alloc::string::String,
4719    #[prost(string, tag = "7")]
4720    pub agent_name: ::prost::alloc::string::String,
4721    #[prost(message, optional, tag = "8")]
4722    pub state: ::core::option::Option<JobState>,
4723    #[prost(bool, tag = "10")]
4724    pub enable_recording: bool,
4725    #[prost(string, tag = "11")]
4726    pub deployment: ::prost::alloc::string::String,
4727    #[prost(map = "string, string", tag = "12")]
4728    pub attributes: ::std::collections::HashMap<::prost::alloc::string::String, ::prost::alloc::string::String>,
4729    #[prost(bool, tag = "13")]
4730    pub enable_redaction: bool,
4731}
4732#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
4733pub struct JobState {
4734    #[prost(enumeration = "JobStatus", tag = "1")]
4735    pub status: i32,
4736    #[prost(string, tag = "2")]
4737    pub error: ::prost::alloc::string::String,
4738    #[prost(int64, tag = "3")]
4739    pub started_at: i64,
4740    #[prost(int64, tag = "4")]
4741    pub ended_at: i64,
4742    #[prost(int64, tag = "5")]
4743    pub updated_at: i64,
4744    #[prost(string, tag = "6")]
4745    pub participant_identity: ::prost::alloc::string::String,
4746    #[prost(string, tag = "7")]
4747    pub worker_id: ::prost::alloc::string::String,
4748    #[prost(string, tag = "8")]
4749    pub agent_id: ::prost::alloc::string::String,
4750}
4751/// from Worker to Server
4752#[derive(Clone, PartialEq, ::prost::Message)]
4753pub struct WorkerMessage {
4754    #[prost(oneof = "worker_message::Message", tags = "1, 2, 3, 4, 5, 6, 7")]
4755    pub message: ::core::option::Option<worker_message::Message>,
4756}
4757/// Nested message and enum types in `WorkerMessage`.
4758pub mod worker_message {
4759    #[derive(Clone, PartialEq, ::prost::Oneof)]
4760    pub enum Message {
4761        /// agent workers need to register themselves with the server first
4762        #[prost(message, tag = "1")]
4763        Register(super::RegisterWorkerRequest),
4764        /// worker confirms to server that it's available for a job, or declines it
4765        #[prost(message, tag = "2")]
4766        Availability(super::AvailabilityResponse),
4767        /// worker can update its status to the server, including taking itself out of the pool
4768        #[prost(message, tag = "3")]
4769        UpdateWorker(super::UpdateWorkerStatus),
4770        /// job can send status updates to the server, useful for tracking progress
4771        #[prost(message, tag = "4")]
4772        UpdateJob(super::UpdateJobStatus),
4773        #[prost(message, tag = "5")]
4774        Ping(super::WorkerPing),
4775        #[prost(message, tag = "6")]
4776        SimulateJob(super::SimulateJobRequest),
4777        #[prost(message, tag = "7")]
4778        MigrateJob(super::MigrateJobRequest),
4779    }
4780}
4781/// from Server to Worker
4782#[derive(Clone, PartialEq, ::prost::Message)]
4783pub struct ServerMessage {
4784    #[prost(oneof = "server_message::Message", tags = "1, 2, 3, 5, 4")]
4785    pub message: ::core::option::Option<server_message::Message>,
4786}
4787/// Nested message and enum types in `ServerMessage`.
4788pub mod server_message {
4789    #[derive(Clone, PartialEq, ::prost::Oneof)]
4790    pub enum Message {
4791        /// server confirms the registration, from this moment on, the worker is considered active
4792        #[prost(message, tag = "1")]
4793        Register(super::RegisterWorkerResponse),
4794        /// server asks worker to confirm availability for a job
4795        #[prost(message, tag = "2")]
4796        Availability(super::AvailabilityRequest),
4797        #[prost(message, tag = "3")]
4798        Assignment(super::JobAssignment),
4799        #[prost(message, tag = "5")]
4800        Termination(super::JobTermination),
4801        #[prost(message, tag = "4")]
4802        Pong(super::WorkerPong),
4803    }
4804}
4805#[derive(Clone, PartialEq, ::prost::Message)]
4806pub struct SimulateJobRequest {
4807    #[prost(enumeration = "JobType", tag = "1")]
4808    pub r#type: i32,
4809    #[prost(message, optional, tag = "2")]
4810    pub room: ::core::option::Option<Room>,
4811    #[prost(message, optional, tag = "3")]
4812    pub participant: ::core::option::Option<ParticipantInfo>,
4813}
4814#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
4815pub struct WorkerPing {
4816    #[prost(int64, tag = "1")]
4817    pub timestamp: i64,
4818}
4819#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
4820pub struct WorkerPong {
4821    #[prost(int64, tag = "1")]
4822    pub last_timestamp: i64,
4823    #[prost(int64, tag = "2")]
4824    pub timestamp: i64,
4825}
4826#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
4827pub struct RegisterWorkerRequest {
4828    #[prost(enumeration = "JobType", tag = "1")]
4829    pub r#type: i32,
4830    #[prost(string, tag = "8")]
4831    pub agent_name: ::prost::alloc::string::String,
4832    /// string worker_id = 2;
4833    #[prost(string, tag = "3")]
4834    pub version: ::prost::alloc::string::String,
4835    /// string name = 4 \[deprecated = true\];
4836    #[prost(uint32, tag = "5")]
4837    pub ping_interval: u32,
4838    #[prost(string, optional, tag = "6")]
4839    pub namespace: ::core::option::Option<::prost::alloc::string::String>,
4840    #[prost(message, optional, tag = "7")]
4841    pub allowed_permissions: ::core::option::Option<ParticipantPermission>,
4842    #[prost(string, tag = "9")]
4843    pub deployment: ::prost::alloc::string::String,
4844}
4845#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
4846pub struct RegisterWorkerResponse {
4847    #[prost(string, tag = "1")]
4848    pub worker_id: ::prost::alloc::string::String,
4849    #[prost(message, optional, tag = "3")]
4850    pub server_info: ::core::option::Option<ServerInfo>,
4851}
4852#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
4853pub struct MigrateJobRequest {
4854    /// string job_id = 1 \[deprecated = true\];
4855    #[prost(string, repeated, tag = "2")]
4856    pub job_ids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
4857}
4858#[derive(Clone, PartialEq, ::prost::Message)]
4859pub struct AvailabilityRequest {
4860    #[prost(message, optional, tag = "1")]
4861    pub job: ::core::option::Option<Job>,
4862    /// True when the job was previously assigned to another worker but has been
4863    /// migrated due to different reasons (e.g. worker failure, job migration)
4864    #[prost(bool, tag = "2")]
4865    pub resuming: bool,
4866}
4867#[derive(Clone, PartialEq, ::prost::Message)]
4868pub struct AvailabilityResponse {
4869    #[prost(string, tag = "1")]
4870    pub job_id: ::prost::alloc::string::String,
4871    #[prost(bool, tag = "2")]
4872    pub available: bool,
4873    #[prost(bool, tag = "3")]
4874    pub supports_resume: bool,
4875    #[prost(bool, tag = "8")]
4876    pub terminate: bool,
4877    #[prost(string, tag = "4")]
4878    pub participant_name: ::prost::alloc::string::String,
4879    #[prost(string, tag = "5")]
4880    pub participant_identity: ::prost::alloc::string::String,
4881    #[prost(string, tag = "6")]
4882    pub participant_metadata: ::prost::alloc::string::String,
4883    /// NEXT_ID: 9
4884    #[prost(map = "string, string", tag = "7")]
4885    pub participant_attributes: ::std::collections::HashMap<::prost::alloc::string::String, ::prost::alloc::string::String>,
4886}
4887#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
4888pub struct UpdateJobStatus {
4889    #[prost(string, tag = "1")]
4890    pub job_id: ::prost::alloc::string::String,
4891    /// The worker can indicate the job end by either specifying SUCCESS or FAILED
4892    #[prost(enumeration = "JobStatus", tag = "2")]
4893    pub status: i32,
4894    /// metadata shown on the dashboard, useful for debugging
4895    #[prost(string, tag = "3")]
4896    pub error: ::prost::alloc::string::String,
4897}
4898#[derive(Clone, Copy, PartialEq, ::prost::Message)]
4899pub struct UpdateWorkerStatus {
4900    #[prost(enumeration = "WorkerStatus", optional, tag = "1")]
4901    pub status: ::core::option::Option<i32>,
4902    /// optional string metadata = 2 \[deprecated=true\];
4903    #[prost(float, tag = "3")]
4904    pub load: f32,
4905    #[prost(uint32, tag = "4")]
4906    pub job_count: u32,
4907}
4908#[derive(Clone, PartialEq, ::prost::Message)]
4909pub struct JobAssignment {
4910    #[prost(message, optional, tag = "1")]
4911    pub job: ::core::option::Option<Job>,
4912    #[prost(string, optional, tag = "2")]
4913    pub url: ::core::option::Option<::prost::alloc::string::String>,
4914    #[prost(string, tag = "3")]
4915    pub token: ::prost::alloc::string::String,
4916}
4917#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
4918pub struct JobTermination {
4919    #[prost(string, tag = "1")]
4920    pub job_id: ::prost::alloc::string::String,
4921}
4922#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
4923#[repr(i32)]
4924pub enum JobType {
4925    JtRoom = 0,
4926    JtPublisher = 1,
4927    JtParticipant = 2,
4928}
4929impl JobType {
4930    /// String value of the enum field names used in the ProtoBuf definition.
4931    ///
4932    /// The values are not transformed in any way and thus are considered stable
4933    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
4934    pub fn as_str_name(&self) -> &'static str {
4935        match self {
4936            Self::JtRoom => "JT_ROOM",
4937            Self::JtPublisher => "JT_PUBLISHER",
4938            Self::JtParticipant => "JT_PARTICIPANT",
4939        }
4940    }
4941    /// Creates an enum from field names used in the ProtoBuf definition.
4942    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
4943        match value {
4944            "JT_ROOM" => Some(Self::JtRoom),
4945            "JT_PUBLISHER" => Some(Self::JtPublisher),
4946            "JT_PARTICIPANT" => Some(Self::JtParticipant),
4947            _ => None,
4948        }
4949    }
4950}
4951#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
4952#[repr(i32)]
4953pub enum WorkerStatus {
4954    WsAvailable = 0,
4955    WsFull = 1,
4956}
4957impl WorkerStatus {
4958    /// String value of the enum field names used in the ProtoBuf definition.
4959    ///
4960    /// The values are not transformed in any way and thus are considered stable
4961    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
4962    pub fn as_str_name(&self) -> &'static str {
4963        match self {
4964            Self::WsAvailable => "WS_AVAILABLE",
4965            Self::WsFull => "WS_FULL",
4966        }
4967    }
4968    /// Creates an enum from field names used in the ProtoBuf definition.
4969    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
4970        match value {
4971            "WS_AVAILABLE" => Some(Self::WsAvailable),
4972            "WS_FULL" => Some(Self::WsFull),
4973            _ => None,
4974        }
4975    }
4976}
4977#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
4978#[repr(i32)]
4979pub enum JobStatus {
4980    JsPending = 0,
4981    JsRunning = 1,
4982    JsSuccess = 2,
4983    JsFailed = 3,
4984}
4985impl JobStatus {
4986    /// String value of the enum field names used in the ProtoBuf definition.
4987    ///
4988    /// The values are not transformed in any way and thus are considered stable
4989    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
4990    pub fn as_str_name(&self) -> &'static str {
4991        match self {
4992            Self::JsPending => "JS_PENDING",
4993            Self::JsRunning => "JS_RUNNING",
4994            Self::JsSuccess => "JS_SUCCESS",
4995            Self::JsFailed => "JS_FAILED",
4996        }
4997    }
4998    /// Creates an enum from field names used in the ProtoBuf definition.
4999    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
5000        match value {
5001            "JS_PENDING" => Some(Self::JsPending),
5002            "JS_RUNNING" => Some(Self::JsRunning),
5003            "JS_SUCCESS" => Some(Self::JsSuccess),
5004            "JS_FAILED" => Some(Self::JsFailed),
5005            _ => None,
5006        }
5007    }
5008}
5009#[derive(Clone, PartialEq, ::prost::Message)]
5010pub struct CreateAgentDispatchRequest {
5011    #[prost(string, tag = "1")]
5012    pub agent_name: ::prost::alloc::string::String,
5013    #[prost(string, tag = "2")]
5014    pub room: ::prost::alloc::string::String,
5015    #[prost(string, tag = "3")]
5016    pub metadata: ::prost::alloc::string::String,
5017    /// cloud only
5018    #[prost(enumeration = "JobRestartPolicy", tag = "4")]
5019    pub restart_policy: i32,
5020    #[prost(string, tag = "5")]
5021    pub deployment: ::prost::alloc::string::String,
5022    #[prost(map = "string, string", tag = "6")]
5023    pub attributes: ::std::collections::HashMap<::prost::alloc::string::String, ::prost::alloc::string::String>,
5024}
5025#[derive(Clone, PartialEq, ::prost::Message)]
5026pub struct RoomAgentDispatch {
5027    #[prost(string, tag = "1")]
5028    pub agent_name: ::prost::alloc::string::String,
5029    #[prost(string, tag = "2")]
5030    pub metadata: ::prost::alloc::string::String,
5031    /// cloud only
5032    #[prost(enumeration = "JobRestartPolicy", tag = "3")]
5033    pub restart_policy: i32,
5034    #[prost(string, tag = "4")]
5035    pub deployment: ::prost::alloc::string::String,
5036    #[prost(map = "string, string", tag = "5")]
5037    pub attributes: ::std::collections::HashMap<::prost::alloc::string::String, ::prost::alloc::string::String>,
5038}
5039#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
5040pub struct DeleteAgentDispatchRequest {
5041    #[prost(string, tag = "1")]
5042    pub dispatch_id: ::prost::alloc::string::String,
5043    #[prost(string, tag = "2")]
5044    pub room: ::prost::alloc::string::String,
5045}
5046#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
5047pub struct ListAgentDispatchRequest {
5048    /// if set, only the dispatch whose id is given will be returned
5049    #[prost(string, tag = "1")]
5050    pub dispatch_id: ::prost::alloc::string::String,
5051    /// name of the room to list agents for. Must be set.
5052    #[prost(string, tag = "2")]
5053    pub room: ::prost::alloc::string::String,
5054}
5055#[derive(Clone, PartialEq, ::prost::Message)]
5056pub struct ListAgentDispatchResponse {
5057    #[prost(message, repeated, tag = "1")]
5058    pub agent_dispatches: ::prost::alloc::vec::Vec<AgentDispatch>,
5059}
5060#[derive(Clone, PartialEq, ::prost::Message)]
5061pub struct AgentDispatch {
5062    #[prost(string, tag = "1")]
5063    pub id: ::prost::alloc::string::String,
5064    #[prost(string, tag = "2")]
5065    pub agent_name: ::prost::alloc::string::String,
5066    #[prost(string, tag = "3")]
5067    pub room: ::prost::alloc::string::String,
5068    #[prost(string, tag = "4")]
5069    pub metadata: ::prost::alloc::string::String,
5070    #[prost(message, optional, tag = "5")]
5071    pub state: ::core::option::Option<AgentDispatchState>,
5072    /// cloud only
5073    #[prost(enumeration = "JobRestartPolicy", tag = "6")]
5074    pub restart_policy: i32,
5075    #[prost(string, tag = "7")]
5076    pub deployment: ::prost::alloc::string::String,
5077    #[prost(map = "string, string", tag = "8")]
5078    pub attributes: ::std::collections::HashMap<::prost::alloc::string::String, ::prost::alloc::string::String>,
5079}
5080#[derive(Clone, PartialEq, ::prost::Message)]
5081pub struct AgentDispatchState {
5082    /// For dispatches of tyoe JT_ROOM, there will be at most 1 job.
5083    /// For dispatches of type JT_PUBLISHER, there will be 1 per publisher.
5084    #[prost(message, repeated, tag = "1")]
5085    pub jobs: ::prost::alloc::vec::Vec<Job>,
5086    #[prost(int64, tag = "2")]
5087    pub created_at: i64,
5088    #[prost(int64, tag = "3")]
5089    pub deleted_at: i64,
5090}
5091#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
5092#[repr(i32)]
5093pub enum JobRestartPolicy {
5094    /// restart when the job fails (default)
5095    JrpOnFailure = 0,
5096    /// never restart
5097    JrpNever = 1,
5098}
5099impl JobRestartPolicy {
5100    /// String value of the enum field names used in the ProtoBuf definition.
5101    ///
5102    /// The values are not transformed in any way and thus are considered stable
5103    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
5104    pub fn as_str_name(&self) -> &'static str {
5105        match self {
5106            Self::JrpOnFailure => "JRP_ON_FAILURE",
5107            Self::JrpNever => "JRP_NEVER",
5108        }
5109    }
5110    /// Creates an enum from field names used in the ProtoBuf definition.
5111    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
5112        match value {
5113            "JRP_ON_FAILURE" => Some(Self::JrpOnFailure),
5114            "JRP_NEVER" => Some(Self::JrpNever),
5115            _ => None,
5116        }
5117    }
5118}
5119#[derive(Clone, PartialEq, ::prost::Message)]
5120pub struct CreateRoomRequest {
5121    /// name of the room
5122    #[prost(string, tag = "1")]
5123    pub name: ::prost::alloc::string::String,
5124    /// configuration to use for this room parameters. Setting parameters below override the config defaults.
5125    #[prost(string, tag = "12")]
5126    pub room_preset: ::prost::alloc::string::String,
5127    /// number of seconds to keep the room open if no one joins
5128    #[prost(uint32, tag = "2")]
5129    pub empty_timeout: u32,
5130    /// number of seconds to keep the room open after everyone leaves
5131    #[prost(uint32, tag = "10")]
5132    pub departure_timeout: u32,
5133    /// limit number of participants that can be in a room
5134    #[prost(uint32, tag = "3")]
5135    pub max_participants: u32,
5136    /// override the node room is allocated to, for debugging
5137    #[prost(string, tag = "4")]
5138    pub node_id: ::prost::alloc::string::String,
5139    /// metadata of room
5140    #[prost(string, tag = "5")]
5141    pub metadata: ::prost::alloc::string::String,
5142    /// search tags
5143    #[prost(map = "string, string", tag = "15")]
5144    pub tags: ::std::collections::HashMap<::prost::alloc::string::String, ::prost::alloc::string::String>,
5145    /// auto-egress configurations
5146    #[prost(message, optional, tag = "6")]
5147    pub egress: ::core::option::Option<RoomEgress>,
5148    /// playout delay of subscriber
5149    #[prost(uint32, tag = "7")]
5150    pub min_playout_delay: u32,
5151    #[prost(uint32, tag = "8")]
5152    pub max_playout_delay: u32,
5153    /// improves A/V sync when playout_delay set to a value larger than 200ms. It will disables transceiver re-use
5154    /// so not recommended for rooms with frequent subscription changes
5155    #[prost(bool, tag = "9")]
5156    pub sync_streams: bool,
5157    /// replay
5158    #[prost(bool, tag = "13")]
5159    pub replay_enabled: bool,
5160    /// Define agents that should be dispatched to this room
5161    #[prost(message, repeated, tag = "14")]
5162    pub agents: ::prost::alloc::vec::Vec<RoomAgentDispatch>,
5163}
5164#[derive(Clone, PartialEq, ::prost::Message)]
5165pub struct RoomEgress {
5166    #[prost(message, optional, tag = "1")]
5167    pub room: ::core::option::Option<RoomCompositeEgressRequest>,
5168    #[prost(message, optional, tag = "3")]
5169    pub participant: ::core::option::Option<AutoParticipantEgress>,
5170    #[prost(message, optional, tag = "2")]
5171    pub tracks: ::core::option::Option<AutoTrackEgress>,
5172}
5173#[derive(Clone, PartialEq, ::prost::Message)]
5174pub struct RoomAgent {
5175    #[prost(message, repeated, tag = "1")]
5176    pub dispatches: ::prost::alloc::vec::Vec<RoomAgentDispatch>,
5177}
5178#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
5179pub struct ListRoomsRequest {
5180    /// when set, will only return rooms with name match
5181    #[prost(string, repeated, tag = "1")]
5182    pub names: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
5183}
5184#[derive(Clone, PartialEq, ::prost::Message)]
5185pub struct ListRoomsResponse {
5186    #[prost(message, repeated, tag = "1")]
5187    pub rooms: ::prost::alloc::vec::Vec<Room>,
5188}
5189#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
5190pub struct DeleteRoomRequest {
5191    /// name of the room
5192    #[prost(string, tag = "1")]
5193    pub room: ::prost::alloc::string::String,
5194}
5195#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
5196pub struct DeleteRoomResponse {
5197}
5198#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
5199pub struct ListParticipantsRequest {
5200    /// name of the room
5201    #[prost(string, tag = "1")]
5202    pub room: ::prost::alloc::string::String,
5203}
5204#[derive(Clone, PartialEq, ::prost::Message)]
5205pub struct ListParticipantsResponse {
5206    #[prost(message, repeated, tag = "1")]
5207    pub participants: ::prost::alloc::vec::Vec<ParticipantInfo>,
5208}
5209#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
5210pub struct RoomParticipantIdentity {
5211    /// name of the room
5212    #[prost(string, tag = "1")]
5213    pub room: ::prost::alloc::string::String,
5214    /// identity of the participant
5215    #[prost(string, tag = "2")]
5216    pub identity: ::prost::alloc::string::String,
5217    /// Unix timestamp used to invalidate token whose nbf is before this value.
5218    /// Used only by RemoveParticipant; defaults to now(server)+leeway(1min) if left empty.
5219    #[prost(int64, tag = "3")]
5220    pub revoke_token_ts: i64,
5221}
5222#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
5223pub struct RemoveParticipantResponse {
5224}
5225#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
5226pub struct MuteRoomTrackRequest {
5227    /// name of the room
5228    #[prost(string, tag = "1")]
5229    pub room: ::prost::alloc::string::String,
5230    #[prost(string, tag = "2")]
5231    pub identity: ::prost::alloc::string::String,
5232    /// sid of the track to mute
5233    #[prost(string, tag = "3")]
5234    pub track_sid: ::prost::alloc::string::String,
5235    /// set to true to mute, false to unmute
5236    #[prost(bool, tag = "4")]
5237    pub muted: bool,
5238}
5239#[derive(Clone, PartialEq, ::prost::Message)]
5240pub struct MuteRoomTrackResponse {
5241    #[prost(message, optional, tag = "1")]
5242    pub track: ::core::option::Option<TrackInfo>,
5243}
5244#[derive(Clone, PartialEq, ::prost::Message)]
5245pub struct UpdateParticipantRequest {
5246    #[prost(string, tag = "1")]
5247    pub room: ::prost::alloc::string::String,
5248    #[prost(string, tag = "2")]
5249    pub identity: ::prost::alloc::string::String,
5250    /// metadata to update. skipping updates if left empty
5251    #[prost(string, tag = "3")]
5252    pub metadata: ::prost::alloc::string::String,
5253    /// set to update the participant's permissions
5254    #[prost(message, optional, tag = "4")]
5255    pub permission: ::core::option::Option<ParticipantPermission>,
5256    /// display name to update
5257    #[prost(string, tag = "5")]
5258    pub name: ::prost::alloc::string::String,
5259    /// attributes to update. it only updates attributes that have been set
5260    /// to delete attributes, set the value to an empty string
5261    #[prost(map = "string, string", tag = "6")]
5262    pub attributes: ::std::collections::HashMap<::prost::alloc::string::String, ::prost::alloc::string::String>,
5263}
5264#[derive(Clone, PartialEq, ::prost::Message)]
5265pub struct UpdateSubscriptionsRequest {
5266    #[prost(string, tag = "1")]
5267    pub room: ::prost::alloc::string::String,
5268    #[prost(string, tag = "2")]
5269    pub identity: ::prost::alloc::string::String,
5270    /// list of sids of tracks
5271    #[prost(string, repeated, tag = "3")]
5272    pub track_sids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
5273    /// set to true to subscribe, false to unsubscribe from tracks
5274    #[prost(bool, tag = "4")]
5275    pub subscribe: bool,
5276    /// list of participants and their tracks
5277    #[prost(message, repeated, tag = "5")]
5278    pub participant_tracks: ::prost::alloc::vec::Vec<ParticipantTracks>,
5279}
5280/// empty for now
5281#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
5282pub struct UpdateSubscriptionsResponse {
5283}
5284#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
5285pub struct SendDataRequest {
5286    #[prost(string, tag = "1")]
5287    pub room: ::prost::alloc::string::String,
5288    #[prost(bytes = "vec", tag = "2")]
5289    pub data: ::prost::alloc::vec::Vec<u8>,
5290    #[prost(enumeration = "data_packet::Kind", tag = "3")]
5291    pub kind: i32,
5292    /// mark deprecated
5293    #[deprecated]
5294    #[prost(string, repeated, tag = "4")]
5295    pub destination_sids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
5296    /// when set, only forward to these identities
5297    #[prost(string, repeated, tag = "6")]
5298    pub destination_identities: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
5299    #[prost(string, optional, tag = "5")]
5300    pub topic: ::core::option::Option<::prost::alloc::string::String>,
5301    /// added by SDK to enable de-duping of messages, for INTERNAL USE ONLY
5302    #[prost(bytes = "vec", tag = "7")]
5303    pub nonce: ::prost::alloc::vec::Vec<u8>,
5304}
5305///
5306#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
5307pub struct SendDataResponse {
5308}
5309#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
5310pub struct UpdateRoomMetadataRequest {
5311    #[prost(string, tag = "1")]
5312    pub room: ::prost::alloc::string::String,
5313    /// metadata to update. skipping updates if left empty
5314    #[prost(string, tag = "2")]
5315    pub metadata: ::prost::alloc::string::String,
5316}
5317#[derive(Clone, PartialEq, ::prost::Message)]
5318pub struct RoomConfiguration {
5319    /// Used as ID, must be unique
5320    #[prost(string, tag = "1")]
5321    pub name: ::prost::alloc::string::String,
5322    /// number of seconds to keep the room open if no one joins
5323    #[prost(uint32, tag = "2")]
5324    pub empty_timeout: u32,
5325    /// number of seconds to keep the room open after everyone leaves
5326    #[prost(uint32, tag = "3")]
5327    pub departure_timeout: u32,
5328    /// limit number of participants that can be in a room, excluding Egress and Agent participants
5329    #[prost(uint32, tag = "4")]
5330    pub max_participants: u32,
5331    /// metadata of room
5332    #[prost(string, tag = "11")]
5333    pub metadata: ::prost::alloc::string::String,
5334    /// egress
5335    #[prost(message, optional, tag = "5")]
5336    pub egress: ::core::option::Option<RoomEgress>,
5337    /// playout delay of subscriber
5338    #[prost(uint32, tag = "7")]
5339    pub min_playout_delay: u32,
5340    #[prost(uint32, tag = "8")]
5341    pub max_playout_delay: u32,
5342    /// improves A/V sync when playout_delay set to a value larger than 200ms. It will disables transceiver re-use
5343    /// so not recommended for rooms with frequent subscription changes
5344    #[prost(bool, tag = "9")]
5345    pub sync_streams: bool,
5346    /// Define agents that should be dispatched to this room
5347    #[prost(message, repeated, tag = "10")]
5348    pub agents: ::prost::alloc::vec::Vec<RoomAgentDispatch>,
5349    /// Tags to attach to the room
5350    #[prost(map = "string, string", tag = "12")]
5351    pub tags: ::std::collections::HashMap<::prost::alloc::string::String, ::prost::alloc::string::String>,
5352}
5353#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
5354pub struct ForwardParticipantRequest {
5355    /// room to forward participant from
5356    #[prost(string, tag = "1")]
5357    pub room: ::prost::alloc::string::String,
5358    /// identity of the participant to forward
5359    #[prost(string, tag = "2")]
5360    pub identity: ::prost::alloc::string::String,
5361    /// room to forward participant to
5362    #[prost(string, tag = "3")]
5363    pub destination_room: ::prost::alloc::string::String,
5364}
5365#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
5366pub struct ForwardParticipantResponse {
5367}
5368#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
5369pub struct MoveParticipantRequest {
5370    /// room to move participant from
5371    #[prost(string, tag = "1")]
5372    pub room: ::prost::alloc::string::String,
5373    /// identity of the participant to move to
5374    #[prost(string, tag = "2")]
5375    pub identity: ::prost::alloc::string::String,
5376    /// room to move participant to
5377    #[prost(string, tag = "3")]
5378    pub destination_room: ::prost::alloc::string::String,
5379}
5380#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
5381pub struct MoveParticipantResponse {
5382}
5383#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
5384pub struct PerformRpcRequest {
5385    #[prost(string, tag = "1")]
5386    pub room: ::prost::alloc::string::String,
5387    #[prost(string, tag = "2")]
5388    pub destination_identity: ::prost::alloc::string::String,
5389    #[prost(string, tag = "3")]
5390    pub method: ::prost::alloc::string::String,
5391    #[prost(string, tag = "4")]
5392    pub payload: ::prost::alloc::string::String,
5393    #[prost(uint32, tag = "5")]
5394    pub response_timeout_ms: u32,
5395}
5396#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
5397pub struct PerformRpcResponse {
5398    #[prost(string, tag = "1")]
5399    pub payload: ::prost::alloc::string::String,
5400}
5401#[derive(Clone, PartialEq, ::prost::Message)]
5402pub struct CreateIngressRequest {
5403    #[prost(enumeration = "IngressInput", tag = "1")]
5404    pub input_type: i32,
5405    /// Where to pull media from, only for URL input type
5406    #[prost(string, tag = "9")]
5407    pub url: ::prost::alloc::string::String,
5408    /// User provided identifier for the ingress
5409    #[prost(string, tag = "2")]
5410    pub name: ::prost::alloc::string::String,
5411    /// room to publish to
5412    #[prost(string, tag = "3")]
5413    pub room_name: ::prost::alloc::string::String,
5414    /// publish as participant
5415    #[prost(string, tag = "4")]
5416    pub participant_identity: ::prost::alloc::string::String,
5417    /// name of publishing participant (used for display only)
5418    #[prost(string, tag = "5")]
5419    pub participant_name: ::prost::alloc::string::String,
5420    /// metadata associated with the publishing participant
5421    #[prost(string, tag = "10")]
5422    pub participant_metadata: ::prost::alloc::string::String,
5423    /// \[depreacted \] whether to pass through the incoming media without transcoding, only compatible with some input types. Use `enable_transcoding` instead.
5424    #[deprecated]
5425    #[prost(bool, tag = "8")]
5426    pub bypass_transcoding: bool,
5427    /// Whether to transcode the ingested media. Only WHIP supports disabling transcoding currently. WHIP will default to transcoding disabled. Replaces `bypass_transcoding. 
5428    #[prost(bool, optional, tag = "11")]
5429    pub enable_transcoding: ::core::option::Option<bool>,
5430    #[prost(message, optional, tag = "6")]
5431    pub audio: ::core::option::Option<IngressAudioOptions>,
5432    #[prost(message, optional, tag = "7")]
5433    pub video: ::core::option::Option<IngressVideoOptions>,
5434    /// The default value is true and when set to false, the new connection attempts will be rejected
5435    #[prost(bool, optional, tag = "12")]
5436    pub enabled: ::core::option::Option<bool>,
5437}
5438#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
5439pub struct IngressAudioOptions {
5440    #[prost(string, tag = "1")]
5441    pub name: ::prost::alloc::string::String,
5442    #[prost(enumeration = "TrackSource", tag = "2")]
5443    pub source: i32,
5444    #[prost(oneof = "ingress_audio_options::EncodingOptions", tags = "3, 4")]
5445    pub encoding_options: ::core::option::Option<ingress_audio_options::EncodingOptions>,
5446}
5447/// Nested message and enum types in `IngressAudioOptions`.
5448pub mod ingress_audio_options {
5449    #[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Oneof)]
5450    pub enum EncodingOptions {
5451        #[prost(enumeration = "super::IngressAudioEncodingPreset", tag = "3")]
5452        Preset(i32),
5453        #[prost(message, tag = "4")]
5454        Options(super::IngressAudioEncodingOptions),
5455    }
5456}
5457#[derive(Clone, PartialEq, ::prost::Message)]
5458pub struct IngressVideoOptions {
5459    #[prost(string, tag = "1")]
5460    pub name: ::prost::alloc::string::String,
5461    #[prost(enumeration = "TrackSource", tag = "2")]
5462    pub source: i32,
5463    #[prost(oneof = "ingress_video_options::EncodingOptions", tags = "3, 4")]
5464    pub encoding_options: ::core::option::Option<ingress_video_options::EncodingOptions>,
5465}
5466/// Nested message and enum types in `IngressVideoOptions`.
5467pub mod ingress_video_options {
5468    #[derive(Clone, PartialEq, ::prost::Oneof)]
5469    pub enum EncodingOptions {
5470        #[prost(enumeration = "super::IngressVideoEncodingPreset", tag = "3")]
5471        Preset(i32),
5472        #[prost(message, tag = "4")]
5473        Options(super::IngressVideoEncodingOptions),
5474    }
5475}
5476#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
5477pub struct IngressAudioEncodingOptions {
5478    /// desired audio codec to publish to room
5479    #[prost(enumeration = "AudioCodec", tag = "1")]
5480    pub audio_codec: i32,
5481    #[prost(uint32, tag = "2")]
5482    pub bitrate: u32,
5483    #[prost(bool, tag = "3")]
5484    pub disable_dtx: bool,
5485    #[prost(uint32, tag = "4")]
5486    pub channels: u32,
5487}
5488#[derive(Clone, PartialEq, ::prost::Message)]
5489pub struct IngressVideoEncodingOptions {
5490    /// desired codec to publish to room
5491    #[prost(enumeration = "VideoCodec", tag = "1")]
5492    pub video_codec: i32,
5493    #[prost(double, tag = "2")]
5494    pub frame_rate: f64,
5495    /// simulcast layers to publish, when empty, should usually be set to layers at 1/2 and 1/4 of the dimensions
5496    #[prost(message, repeated, tag = "3")]
5497    pub layers: ::prost::alloc::vec::Vec<VideoLayer>,
5498}
5499#[derive(Clone, PartialEq, ::prost::Message)]
5500pub struct IngressInfo {
5501    #[prost(string, tag = "1")]
5502    pub ingress_id: ::prost::alloc::string::String,
5503    #[prost(string, tag = "2")]
5504    pub name: ::prost::alloc::string::String,
5505    #[prost(string, tag = "3")]
5506    pub stream_key: ::prost::alloc::string::String,
5507    /// URL to point the encoder to for push (RTMP, WHIP), or location to pull media from for pull (URL)
5508    #[prost(string, tag = "4")]
5509    pub url: ::prost::alloc::string::String,
5510    /// for RTMP input, it'll be a rtmp:// URL
5511    /// for FILE input, it'll be a http:// URL
5512    /// for SRT input, it'll be a srt:// URL
5513    #[prost(enumeration = "IngressInput", tag = "5")]
5514    pub input_type: i32,
5515    #[deprecated]
5516    #[prost(bool, tag = "13")]
5517    pub bypass_transcoding: bool,
5518    #[prost(bool, optional, tag = "15")]
5519    pub enable_transcoding: ::core::option::Option<bool>,
5520    #[prost(message, optional, tag = "6")]
5521    pub audio: ::core::option::Option<IngressAudioOptions>,
5522    #[prost(message, optional, tag = "7")]
5523    pub video: ::core::option::Option<IngressVideoOptions>,
5524    #[prost(string, tag = "8")]
5525    pub room_name: ::prost::alloc::string::String,
5526    #[prost(string, tag = "9")]
5527    pub participant_identity: ::prost::alloc::string::String,
5528    #[prost(string, tag = "10")]
5529    pub participant_name: ::prost::alloc::string::String,
5530    #[prost(string, tag = "14")]
5531    pub participant_metadata: ::prost::alloc::string::String,
5532    #[prost(bool, tag = "11")]
5533    pub reusable: bool,
5534    /// Description of error/stream non compliance and debug info for publisher otherwise (received bitrate, resolution, bandwidth)
5535    #[prost(message, optional, tag = "12")]
5536    pub state: ::core::option::Option<IngressState>,
5537    /// The default value is true and when set to false, the new connection attempts will be rejected
5538    #[prost(bool, optional, tag = "16")]
5539    pub enabled: ::core::option::Option<bool>,
5540}
5541#[derive(Clone, PartialEq, ::prost::Message)]
5542pub struct IngressState {
5543    #[prost(enumeration = "ingress_state::Status", tag = "1")]
5544    pub status: i32,
5545    /// Error/non compliance description if any
5546    #[prost(string, tag = "2")]
5547    pub error: ::prost::alloc::string::String,
5548    #[prost(message, optional, tag = "3")]
5549    pub video: ::core::option::Option<InputVideoState>,
5550    #[prost(message, optional, tag = "4")]
5551    pub audio: ::core::option::Option<InputAudioState>,
5552    /// ID of the current/previous room published to
5553    #[prost(string, tag = "5")]
5554    pub room_id: ::prost::alloc::string::String,
5555    #[prost(int64, tag = "7")]
5556    pub started_at: i64,
5557    #[prost(int64, tag = "8")]
5558    pub ended_at: i64,
5559    #[prost(int64, tag = "10")]
5560    pub updated_at: i64,
5561    #[prost(string, tag = "9")]
5562    pub resource_id: ::prost::alloc::string::String,
5563    #[prost(message, repeated, tag = "6")]
5564    pub tracks: ::prost::alloc::vec::Vec<TrackInfo>,
5565}
5566/// Nested message and enum types in `IngressState`.
5567pub mod ingress_state {
5568    #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
5569    #[repr(i32)]
5570    pub enum Status {
5571        EndpointInactive = 0,
5572        EndpointBuffering = 1,
5573        EndpointPublishing = 2,
5574        EndpointError = 3,
5575        EndpointComplete = 4,
5576    }
5577    impl Status {
5578        /// String value of the enum field names used in the ProtoBuf definition.
5579        ///
5580        /// The values are not transformed in any way and thus are considered stable
5581        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
5582        pub fn as_str_name(&self) -> &'static str {
5583            match self {
5584                Self::EndpointInactive => "ENDPOINT_INACTIVE",
5585                Self::EndpointBuffering => "ENDPOINT_BUFFERING",
5586                Self::EndpointPublishing => "ENDPOINT_PUBLISHING",
5587                Self::EndpointError => "ENDPOINT_ERROR",
5588                Self::EndpointComplete => "ENDPOINT_COMPLETE",
5589            }
5590        }
5591        /// Creates an enum from field names used in the ProtoBuf definition.
5592        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
5593            match value {
5594                "ENDPOINT_INACTIVE" => Some(Self::EndpointInactive),
5595                "ENDPOINT_BUFFERING" => Some(Self::EndpointBuffering),
5596                "ENDPOINT_PUBLISHING" => Some(Self::EndpointPublishing),
5597                "ENDPOINT_ERROR" => Some(Self::EndpointError),
5598                "ENDPOINT_COMPLETE" => Some(Self::EndpointComplete),
5599                _ => None,
5600            }
5601        }
5602    }
5603}
5604#[derive(Clone, PartialEq, ::prost::Message)]
5605pub struct InputVideoState {
5606    #[prost(string, tag = "1")]
5607    pub mime_type: ::prost::alloc::string::String,
5608    #[prost(uint32, tag = "2")]
5609    pub average_bitrate: u32,
5610    #[prost(uint32, tag = "3")]
5611    pub width: u32,
5612    #[prost(uint32, tag = "4")]
5613    pub height: u32,
5614    #[prost(double, tag = "5")]
5615    pub framerate: f64,
5616}
5617#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
5618pub struct InputAudioState {
5619    #[prost(string, tag = "1")]
5620    pub mime_type: ::prost::alloc::string::String,
5621    #[prost(uint32, tag = "2")]
5622    pub average_bitrate: u32,
5623    #[prost(uint32, tag = "3")]
5624    pub channels: u32,
5625    #[prost(uint32, tag = "4")]
5626    pub sample_rate: u32,
5627}
5628#[derive(Clone, PartialEq, ::prost::Message)]
5629pub struct UpdateIngressRequest {
5630    #[prost(string, tag = "1")]
5631    pub ingress_id: ::prost::alloc::string::String,
5632    #[prost(string, tag = "2")]
5633    pub name: ::prost::alloc::string::String,
5634    #[prost(string, tag = "3")]
5635    pub room_name: ::prost::alloc::string::String,
5636    #[prost(string, tag = "4")]
5637    pub participant_identity: ::prost::alloc::string::String,
5638    #[prost(string, tag = "5")]
5639    pub participant_name: ::prost::alloc::string::String,
5640    #[prost(string, tag = "9")]
5641    pub participant_metadata: ::prost::alloc::string::String,
5642    #[deprecated]
5643    #[prost(bool, optional, tag = "8")]
5644    pub bypass_transcoding: ::core::option::Option<bool>,
5645    #[prost(bool, optional, tag = "10")]
5646    pub enable_transcoding: ::core::option::Option<bool>,
5647    #[prost(message, optional, tag = "6")]
5648    pub audio: ::core::option::Option<IngressAudioOptions>,
5649    #[prost(message, optional, tag = "7")]
5650    pub video: ::core::option::Option<IngressVideoOptions>,
5651    /// The default value is true and when set to false, the new connection attempts will be rejected
5652    #[prost(bool, optional, tag = "11")]
5653    pub enabled: ::core::option::Option<bool>,
5654}
5655#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
5656pub struct ListIngressRequest {
5657    #[prost(message, optional, tag = "3")]
5658    pub page_token: ::core::option::Option<TokenPagination>,
5659    /// when blank, lists all ingress endpoints
5660    ///
5661    /// (optional, filter by room name)
5662    #[prost(string, tag = "1")]
5663    pub room_name: ::prost::alloc::string::String,
5664    /// (optional, filter by ingress ID)
5665    #[prost(string, tag = "2")]
5666    pub ingress_id: ::prost::alloc::string::String,
5667}
5668#[derive(Clone, PartialEq, ::prost::Message)]
5669pub struct ListIngressResponse {
5670    #[prost(message, optional, tag = "2")]
5671    pub next_page_token: ::core::option::Option<TokenPagination>,
5672    /// next field id: 3
5673    #[prost(message, repeated, tag = "1")]
5674    pub items: ::prost::alloc::vec::Vec<IngressInfo>,
5675}
5676#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
5677pub struct DeleteIngressRequest {
5678    #[prost(string, tag = "1")]
5679    pub ingress_id: ::prost::alloc::string::String,
5680}
5681#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
5682#[repr(i32)]
5683pub enum IngressInput {
5684    RtmpInput = 0,
5685    WhipInput = 1,
5686    /// Pull from the provided URL. Only HTTP url are supported, serving either a single media file or a HLS stream
5687    UrlInput = 2,
5688}
5689impl IngressInput {
5690    /// String value of the enum field names used in the ProtoBuf definition.
5691    ///
5692    /// The values are not transformed in any way and thus are considered stable
5693    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
5694    pub fn as_str_name(&self) -> &'static str {
5695        match self {
5696            Self::RtmpInput => "RTMP_INPUT",
5697            Self::WhipInput => "WHIP_INPUT",
5698            Self::UrlInput => "URL_INPUT",
5699        }
5700    }
5701    /// Creates an enum from field names used in the ProtoBuf definition.
5702    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
5703        match value {
5704            "RTMP_INPUT" => Some(Self::RtmpInput),
5705            "WHIP_INPUT" => Some(Self::WhipInput),
5706            "URL_INPUT" => Some(Self::UrlInput),
5707            _ => None,
5708        }
5709    }
5710}
5711#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
5712#[repr(i32)]
5713pub enum IngressAudioEncodingPreset {
5714    /// OPUS, 2 channels, 96kbps
5715    OpusStereo96kbps = 0,
5716    /// OPUS, 1 channel, 64kbps
5717    OpusMono64kbs = 1,
5718}
5719impl IngressAudioEncodingPreset {
5720    /// String value of the enum field names used in the ProtoBuf definition.
5721    ///
5722    /// The values are not transformed in any way and thus are considered stable
5723    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
5724    pub fn as_str_name(&self) -> &'static str {
5725        match self {
5726            Self::OpusStereo96kbps => "OPUS_STEREO_96KBPS",
5727            Self::OpusMono64kbs => "OPUS_MONO_64KBS",
5728        }
5729    }
5730    /// Creates an enum from field names used in the ProtoBuf definition.
5731    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
5732        match value {
5733            "OPUS_STEREO_96KBPS" => Some(Self::OpusStereo96kbps),
5734            "OPUS_MONO_64KBS" => Some(Self::OpusMono64kbs),
5735            _ => None,
5736        }
5737    }
5738}
5739#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
5740#[repr(i32)]
5741pub enum IngressVideoEncodingPreset {
5742    /// 1280x720,  30fps, 1900kbps main layer, 3 layers total
5743    H264720p30fps3Layers = 0,
5744    /// 1980x1080, 30fps, 3500kbps main layer, 3 layers total
5745    H2641080p30fps3Layers = 1,
5746    ///   960x540,  25fps, 1000kbps  main layer, 2 layers total
5747    H264540p25fps2Layers = 2,
5748    /// 1280x720,  30fps, 1900kbps, no simulcast
5749    H264720p30fps1Layer = 3,
5750    /// 1980x1080, 30fps, 3500kbps, no simulcast
5751    H2641080p30fps1Layer = 4,
5752    /// 1280x720,  30fps, 2500kbps main layer, 3 layers total, higher bitrate for high motion, harder to encode content
5753    H264720p30fps3LayersHighMotion = 5,
5754    /// 1980x1080, 30fps, 4500kbps main layer, 3 layers total, higher bitrate for high motion, harder to encode content
5755    H2641080p30fps3LayersHighMotion = 6,
5756    ///   960x540,  25fps, 1300kbps  main layer, 2 layers total, higher bitrate for high motion, harder to encode content
5757    H264540p25fps2LayersHighMotion = 7,
5758    /// 1280x720,  30fps, 2500kbps, no simulcast, higher bitrate for high motion, harder to encode content
5759    H264720p30fps1LayerHighMotion = 8,
5760    /// 1980x1080, 30fps, 4500kbps, no simulcast, higher bitrate for high motion, harder to encode content
5761    H2641080p30fps1LayerHighMotion = 9,
5762}
5763impl IngressVideoEncodingPreset {
5764    /// String value of the enum field names used in the ProtoBuf definition.
5765    ///
5766    /// The values are not transformed in any way and thus are considered stable
5767    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
5768    pub fn as_str_name(&self) -> &'static str {
5769        match self {
5770            Self::H264720p30fps3Layers => "H264_720P_30FPS_3_LAYERS",
5771            Self::H2641080p30fps3Layers => "H264_1080P_30FPS_3_LAYERS",
5772            Self::H264540p25fps2Layers => "H264_540P_25FPS_2_LAYERS",
5773            Self::H264720p30fps1Layer => "H264_720P_30FPS_1_LAYER",
5774            Self::H2641080p30fps1Layer => "H264_1080P_30FPS_1_LAYER",
5775            Self::H264720p30fps3LayersHighMotion => "H264_720P_30FPS_3_LAYERS_HIGH_MOTION",
5776            Self::H2641080p30fps3LayersHighMotion => "H264_1080P_30FPS_3_LAYERS_HIGH_MOTION",
5777            Self::H264540p25fps2LayersHighMotion => "H264_540P_25FPS_2_LAYERS_HIGH_MOTION",
5778            Self::H264720p30fps1LayerHighMotion => "H264_720P_30FPS_1_LAYER_HIGH_MOTION",
5779            Self::H2641080p30fps1LayerHighMotion => "H264_1080P_30FPS_1_LAYER_HIGH_MOTION",
5780        }
5781    }
5782    /// Creates an enum from field names used in the ProtoBuf definition.
5783    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
5784        match value {
5785            "H264_720P_30FPS_3_LAYERS" => Some(Self::H264720p30fps3Layers),
5786            "H264_1080P_30FPS_3_LAYERS" => Some(Self::H2641080p30fps3Layers),
5787            "H264_540P_25FPS_2_LAYERS" => Some(Self::H264540p25fps2Layers),
5788            "H264_720P_30FPS_1_LAYER" => Some(Self::H264720p30fps1Layer),
5789            "H264_1080P_30FPS_1_LAYER" => Some(Self::H2641080p30fps1Layer),
5790            "H264_720P_30FPS_3_LAYERS_HIGH_MOTION" => Some(Self::H264720p30fps3LayersHighMotion),
5791            "H264_1080P_30FPS_3_LAYERS_HIGH_MOTION" => Some(Self::H2641080p30fps3LayersHighMotion),
5792            "H264_540P_25FPS_2_LAYERS_HIGH_MOTION" => Some(Self::H264540p25fps2LayersHighMotion),
5793            "H264_720P_30FPS_1_LAYER_HIGH_MOTION" => Some(Self::H264720p30fps1LayerHighMotion),
5794            "H264_1080P_30FPS_1_LAYER_HIGH_MOTION" => Some(Self::H2641080p30fps1LayerHighMotion),
5795            _ => None,
5796        }
5797    }
5798}
5799#[derive(Clone, PartialEq, ::prost::Message)]
5800pub struct WebhookEvent {
5801    /// one of room_started, room_finished, participant_joined, participant_left, participant_connection_aborted,
5802    /// track_published, track_unpublished, egress_started, egress_updated, egress_ended,
5803    /// ingress_started, ingress_ended, agent_job_started, agent_job_ended
5804    #[prost(string, tag = "1")]
5805    pub event: ::prost::alloc::string::String,
5806    #[prost(message, optional, tag = "2")]
5807    pub room: ::core::option::Option<Room>,
5808    /// set when event is participant_* or track_*
5809    #[prost(message, optional, tag = "3")]
5810    pub participant: ::core::option::Option<ParticipantInfo>,
5811    /// set when event is egress_*
5812    #[prost(message, optional, tag = "9")]
5813    pub egress_info: ::core::option::Option<EgressInfo>,
5814    /// set when event is ingress_*
5815    #[prost(message, optional, tag = "10")]
5816    pub ingress_info: ::core::option::Option<IngressInfo>,
5817    /// set when event is track_*
5818    #[prost(message, optional, tag = "8")]
5819    pub track: ::core::option::Option<TrackInfo>,
5820    /// set when event is agent_job_*
5821    #[prost(message, optional, tag = "12")]
5822    pub job: ::core::option::Option<Job>,
5823    /// unique event uuid
5824    #[prost(string, tag = "6")]
5825    pub id: ::prost::alloc::string::String,
5826    /// timestamp in seconds
5827    #[prost(int64, tag = "7")]
5828    pub created_at: i64,
5829    #[deprecated]
5830    #[prost(int32, tag = "11")]
5831    pub num_dropped: i32,
5832}
5833/// SIPStatus is returned as an error detail in CreateSIPParticipant.
5834#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
5835pub struct SipStatus {
5836    #[prost(enumeration = "SipStatusCode", tag = "1")]
5837    pub code: i32,
5838    #[prost(string, tag = "2")]
5839    pub status: ::prost::alloc::string::String,
5840}
5841#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
5842pub struct CreateSipTrunkRequest {
5843    /// CIDR or IPs that traffic is accepted from
5844    /// An empty list means all inbound traffic is accepted.
5845    #[prost(string, repeated, tag = "1")]
5846    pub inbound_addresses: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
5847    /// IP that SIP INVITE is sent too
5848    #[prost(string, tag = "2")]
5849    pub outbound_address: ::prost::alloc::string::String,
5850    /// Number used to make outbound calls
5851    #[prost(string, tag = "3")]
5852    pub outbound_number: ::prost::alloc::string::String,
5853    #[deprecated]
5854    #[prost(string, repeated, tag = "4")]
5855    pub inbound_numbers_regex: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
5856    /// Accepted `To` values. This Trunk will only accept a call made to
5857    /// these numbers. This allows you to have distinct Trunks for different phone
5858    /// numbers at the same provider.
5859    #[prost(string, repeated, tag = "9")]
5860    pub inbound_numbers: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
5861    /// Username and password used to authenticate inbound and outbound SIP invites
5862    /// May be empty to have no Authentication
5863    #[prost(string, tag = "5")]
5864    pub inbound_username: ::prost::alloc::string::String,
5865    #[prost(string, tag = "6")]
5866    pub inbound_password: ::prost::alloc::string::String,
5867    #[prost(string, tag = "7")]
5868    pub outbound_username: ::prost::alloc::string::String,
5869    #[prost(string, tag = "8")]
5870    pub outbound_password: ::prost::alloc::string::String,
5871    /// Optional human-readable name for the Trunk.
5872    #[prost(string, tag = "10")]
5873    pub name: ::prost::alloc::string::String,
5874    /// Optional user-defined metadata for the Trunk.
5875    #[prost(string, tag = "11")]
5876    pub metadata: ::prost::alloc::string::String,
5877}
5878#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
5879pub struct SipCodec {
5880    #[prost(string, tag = "1")]
5881    pub name: ::prost::alloc::string::String,
5882    #[prost(uint32, tag = "2")]
5883    pub rate: u32,
5884}
5885#[derive(Clone, PartialEq, ::prost::Message)]
5886pub struct SipMediaConfig {
5887    /// if set, ignore the default codecs and use the list below.
5888    #[prost(bool, tag = "1")]
5889    pub only_listed_codecs: bool,
5890    /// List of allowed codecs. If only_listed_codecs is not set, this list is added to default codecs.
5891    #[prost(message, repeated, tag = "2")]
5892    pub codecs: ::prost::alloc::vec::Vec<SipCodec>,
5893    #[prost(enumeration = "SipMediaEncryption", optional, tag = "3")]
5894    pub encryption: ::core::option::Option<i32>,
5895    /// Use specific media timeout. If zero or not specified, will use default timeout.
5896    #[prost(message, optional, tag = "4")]
5897    pub media_timeout: ::core::option::Option<::pbjson_types::Duration>,
5898}
5899#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
5900pub struct ProviderInfo {
5901    #[prost(string, tag = "1")]
5902    pub id: ::prost::alloc::string::String,
5903    #[prost(string, tag = "2")]
5904    pub name: ::prost::alloc::string::String,
5905    #[prost(enumeration = "ProviderType", tag = "3")]
5906    pub r#type: i32,
5907    #[prost(bool, tag = "4")]
5908    pub prevent_transfer: bool,
5909}
5910#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
5911pub struct SipTrunkInfo {
5912    #[prost(string, tag = "1")]
5913    pub sip_trunk_id: ::prost::alloc::string::String,
5914    #[prost(enumeration = "sip_trunk_info::TrunkKind", tag = "14")]
5915    pub kind: i32,
5916    /// CIDR or IPs that traffic is accepted from
5917    /// An empty list means all inbound traffic is accepted.
5918    #[prost(string, repeated, tag = "2")]
5919    pub inbound_addresses: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
5920    /// IP that SIP INVITE is sent too
5921    #[prost(string, tag = "3")]
5922    pub outbound_address: ::prost::alloc::string::String,
5923    /// Number used to make outbound calls
5924    #[prost(string, tag = "4")]
5925    pub outbound_number: ::prost::alloc::string::String,
5926    /// Transport used for inbound and outbound calls.
5927    #[prost(enumeration = "SipTransport", tag = "13")]
5928    pub transport: i32,
5929    #[deprecated]
5930    #[prost(string, repeated, tag = "5")]
5931    pub inbound_numbers_regex: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
5932    /// Accepted `To` values. This Trunk will only accept a call made to
5933    /// these numbers. This allows you to have distinct Trunks for different phone
5934    /// numbers at the same provider.
5935    #[prost(string, repeated, tag = "10")]
5936    pub inbound_numbers: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
5937    /// Username and password used to authenticate inbound and outbound SIP invites
5938    /// May be empty to have no Authentication
5939    #[prost(string, tag = "6")]
5940    pub inbound_username: ::prost::alloc::string::String,
5941    #[prost(string, tag = "7")]
5942    pub inbound_password: ::prost::alloc::string::String,
5943    #[prost(string, tag = "8")]
5944    pub outbound_username: ::prost::alloc::string::String,
5945    #[prost(string, tag = "9")]
5946    pub outbound_password: ::prost::alloc::string::String,
5947    /// Human-readable name for the Trunk.
5948    #[prost(string, tag = "11")]
5949    pub name: ::prost::alloc::string::String,
5950    /// User-defined metadata for the Trunk.
5951    #[prost(string, tag = "12")]
5952    pub metadata: ::prost::alloc::string::String,
5953}
5954/// Nested message and enum types in `SIPTrunkInfo`.
5955pub mod sip_trunk_info {
5956    #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
5957    #[repr(i32)]
5958    pub enum TrunkKind {
5959        TrunkLegacy = 0,
5960        TrunkInbound = 1,
5961        TrunkOutbound = 2,
5962    }
5963    impl TrunkKind {
5964        /// String value of the enum field names used in the ProtoBuf definition.
5965        ///
5966        /// The values are not transformed in any way and thus are considered stable
5967        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
5968        pub fn as_str_name(&self) -> &'static str {
5969            match self {
5970                Self::TrunkLegacy => "TRUNK_LEGACY",
5971                Self::TrunkInbound => "TRUNK_INBOUND",
5972                Self::TrunkOutbound => "TRUNK_OUTBOUND",
5973            }
5974        }
5975        /// Creates an enum from field names used in the ProtoBuf definition.
5976        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
5977            match value {
5978                "TRUNK_LEGACY" => Some(Self::TrunkLegacy),
5979                "TRUNK_INBOUND" => Some(Self::TrunkInbound),
5980                "TRUNK_OUTBOUND" => Some(Self::TrunkOutbound),
5981                _ => None,
5982            }
5983        }
5984    }
5985}
5986#[derive(Clone, PartialEq, ::prost::Message)]
5987pub struct CreateSipInboundTrunkRequest {
5988    /// Trunk ID is ignored
5989    #[prost(message, optional, tag = "1")]
5990    pub trunk: ::core::option::Option<SipInboundTrunkInfo>,
5991}
5992#[derive(Clone, PartialEq, ::prost::Message)]
5993pub struct UpdateSipInboundTrunkRequest {
5994    #[prost(string, tag = "1")]
5995    pub sip_trunk_id: ::prost::alloc::string::String,
5996    #[prost(oneof = "update_sip_inbound_trunk_request::Action", tags = "2, 3")]
5997    pub action: ::core::option::Option<update_sip_inbound_trunk_request::Action>,
5998}
5999/// Nested message and enum types in `UpdateSIPInboundTrunkRequest`.
6000pub mod update_sip_inbound_trunk_request {
6001    #[derive(Clone, PartialEq, ::prost::Oneof)]
6002    pub enum Action {
6003        #[prost(message, tag = "2")]
6004        Replace(super::SipInboundTrunkInfo),
6005        #[prost(message, tag = "3")]
6006        Update(super::SipInboundTrunkUpdate),
6007    }
6008}
6009#[derive(Clone, PartialEq, ::prost::Message)]
6010pub struct SipInboundTrunkInfo {
6011    #[prost(string, tag = "1")]
6012    pub sip_trunk_id: ::prost::alloc::string::String,
6013    /// Human-readable name for the Trunk.
6014    #[prost(string, tag = "2")]
6015    pub name: ::prost::alloc::string::String,
6016    /// User-defined metadata for the Trunk.
6017    #[prost(string, tag = "3")]
6018    pub metadata: ::prost::alloc::string::String,
6019    /// Numbers associated with LiveKit SIP. The Trunk will only accept calls made to these numbers.
6020    /// Creating multiple Trunks with different phone numbers allows having different rules for a single provider.
6021    #[prost(string, repeated, tag = "4")]
6022    pub numbers: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
6023    /// CIDR or IPs that traffic is accepted from.
6024    /// An empty list means all inbound traffic is accepted.
6025    #[prost(string, repeated, tag = "5")]
6026    pub allowed_addresses: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
6027    /// Numbers that are allowed to make calls to this Trunk.
6028    /// An empty list means calls from any phone number is accepted.
6029    #[prost(string, repeated, tag = "6")]
6030    pub allowed_numbers: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
6031    /// Username and password used to authenticate inbound SIP invites.
6032    /// May be empty to have no authentication.
6033    #[prost(string, tag = "7")]
6034    pub auth_username: ::prost::alloc::string::String,
6035    #[prost(string, tag = "8")]
6036    pub auth_password: ::prost::alloc::string::String,
6037    #[prost(string, tag = "19")]
6038    pub auth_realm: ::prost::alloc::string::String,
6039    /// Include these SIP X-* headers in 200 OK responses.
6040    #[prost(map = "string, string", tag = "9")]
6041    pub headers: ::std::collections::HashMap<::prost::alloc::string::String, ::prost::alloc::string::String>,
6042    /// Map SIP X-* headers from INVITE to SIP participant attributes.
6043    #[prost(map = "string, string", tag = "10")]
6044    pub headers_to_attributes: ::std::collections::HashMap<::prost::alloc::string::String, ::prost::alloc::string::String>,
6045    /// Map LiveKit attributes to SIP X-* headers when sending BYE or REFER requests.
6046    /// Keys are the names of attributes and values are the names of X-* headers they will be mapped to.
6047    #[prost(map = "string, string", tag = "14")]
6048    pub attributes_to_headers: ::std::collections::HashMap<::prost::alloc::string::String, ::prost::alloc::string::String>,
6049    /// Map SIP headers from INVITE to sip.h.* participant attributes automatically.
6050    ///
6051    /// When the names of required headers is known, using headers_to_attributes is strongly recommended.
6052    ///
6053    /// When mapping INVITE headers to response headers with attributes_to_headers map,
6054    /// lowercase header names should be used, for example: sip.h.x-custom-header.
6055    #[prost(enumeration = "SipHeaderOptions", tag = "15")]
6056    pub include_headers: i32,
6057    /// Max time for the caller to wait for track subscription.
6058    #[prost(message, optional, tag = "11")]
6059    pub ringing_timeout: ::core::option::Option<::pbjson_types::Duration>,
6060    /// Max call duration.
6061    #[prost(message, optional, tag = "12")]
6062    pub max_call_duration: ::core::option::Option<::pbjson_types::Duration>,
6063    #[prost(bool, tag = "13")]
6064    pub krisp_enabled: bool,
6065    #[deprecated]
6066    #[prost(enumeration = "SipMediaEncryption", tag = "16")]
6067    pub media_encryption: i32,
6068    #[prost(message, optional, tag = "20")]
6069    pub media: ::core::option::Option<SipMediaConfig>,
6070    #[prost(message, optional, tag = "17")]
6071    pub created_at: ::core::option::Option<::pbjson_types::Timestamp>,
6072    #[prost(message, optional, tag = "18")]
6073    pub updated_at: ::core::option::Option<::pbjson_types::Timestamp>,
6074}
6075#[derive(Clone, PartialEq, ::prost::Message)]
6076pub struct SipInboundTrunkUpdate {
6077    #[prost(message, optional, tag = "1")]
6078    pub numbers: ::core::option::Option<ListUpdate>,
6079    #[prost(message, optional, tag = "2")]
6080    pub allowed_addresses: ::core::option::Option<ListUpdate>,
6081    #[prost(message, optional, tag = "3")]
6082    pub allowed_numbers: ::core::option::Option<ListUpdate>,
6083    #[prost(string, optional, tag = "4")]
6084    pub auth_username: ::core::option::Option<::prost::alloc::string::String>,
6085    #[prost(string, optional, tag = "5")]
6086    pub auth_password: ::core::option::Option<::prost::alloc::string::String>,
6087    #[prost(string, optional, tag = "9")]
6088    pub auth_realm: ::core::option::Option<::prost::alloc::string::String>,
6089    #[prost(string, optional, tag = "6")]
6090    pub name: ::core::option::Option<::prost::alloc::string::String>,
6091    #[prost(string, optional, tag = "7")]
6092    pub metadata: ::core::option::Option<::prost::alloc::string::String>,
6093    #[deprecated]
6094    #[prost(enumeration = "SipMediaEncryption", optional, tag = "8")]
6095    pub media_encryption: ::core::option::Option<i32>,
6096    #[prost(message, optional, tag = "10")]
6097    pub media: ::core::option::Option<SipMediaConfig>,
6098}
6099#[derive(Clone, PartialEq, ::prost::Message)]
6100pub struct CreateSipOutboundTrunkRequest {
6101    /// Trunk ID is ignored
6102    #[prost(message, optional, tag = "1")]
6103    pub trunk: ::core::option::Option<SipOutboundTrunkInfo>,
6104}
6105#[derive(Clone, PartialEq, ::prost::Message)]
6106pub struct UpdateSipOutboundTrunkRequest {
6107    #[prost(string, tag = "1")]
6108    pub sip_trunk_id: ::prost::alloc::string::String,
6109    #[prost(oneof = "update_sip_outbound_trunk_request::Action", tags = "2, 3")]
6110    pub action: ::core::option::Option<update_sip_outbound_trunk_request::Action>,
6111}
6112/// Nested message and enum types in `UpdateSIPOutboundTrunkRequest`.
6113pub mod update_sip_outbound_trunk_request {
6114    #[derive(Clone, PartialEq, ::prost::Oneof)]
6115    pub enum Action {
6116        #[prost(message, tag = "2")]
6117        Replace(super::SipOutboundTrunkInfo),
6118        #[prost(message, tag = "3")]
6119        Update(super::SipOutboundTrunkUpdate),
6120    }
6121}
6122#[derive(Clone, PartialEq, ::prost::Message)]
6123pub struct SipOutboundTrunkInfo {
6124    #[prost(string, tag = "1")]
6125    pub sip_trunk_id: ::prost::alloc::string::String,
6126    /// Human-readable name for the Trunk.
6127    #[prost(string, tag = "2")]
6128    pub name: ::prost::alloc::string::String,
6129    /// User-defined metadata for the Trunk.
6130    #[prost(string, tag = "3")]
6131    pub metadata: ::prost::alloc::string::String,
6132    /// Hostname or IP that SIP INVITE is sent too.
6133    /// Note that this is not a SIP URI and should not contain the 'sip:' protocol prefix.
6134    #[prost(string, tag = "4")]
6135    pub address: ::prost::alloc::string::String,
6136    /// country where the call terminates as ISO 3166-1 alpha-2 (<https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2>). This will be used by the livekit infrastructure to route calls.
6137    #[prost(string, tag = "14")]
6138    pub destination_country: ::prost::alloc::string::String,
6139    /// SIP Transport used for outbound call.
6140    #[prost(enumeration = "SipTransport", tag = "5")]
6141    pub transport: i32,
6142    /// Numbers used to make the calls. Random one from this list will be selected.
6143    #[prost(string, repeated, tag = "6")]
6144    pub numbers: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
6145    /// Username and password used to authenticate with SIP server.
6146    /// May be empty to have no authentication.
6147    #[prost(string, tag = "7")]
6148    pub auth_username: ::prost::alloc::string::String,
6149    #[prost(string, tag = "8")]
6150    pub auth_password: ::prost::alloc::string::String,
6151    /// Include these SIP X-* headers in INVITE request.
6152    /// These headers are sent as-is and may help identify this call as coming from LiveKit for the other SIP endpoint.
6153    #[prost(map = "string, string", tag = "9")]
6154    pub headers: ::std::collections::HashMap<::prost::alloc::string::String, ::prost::alloc::string::String>,
6155    /// Map SIP X-* headers from 200 OK to SIP participant attributes.
6156    /// Keys are the names of X-* headers and values are the names of attributes they will be mapped to.
6157    #[prost(map = "string, string", tag = "10")]
6158    pub headers_to_attributes: ::std::collections::HashMap<::prost::alloc::string::String, ::prost::alloc::string::String>,
6159    /// Map LiveKit attributes to SIP X-* headers when sending BYE or REFER requests.
6160    /// Keys are the names of attributes and values are the names of X-* headers they will be mapped to.
6161    #[prost(map = "string, string", tag = "11")]
6162    pub attributes_to_headers: ::std::collections::HashMap<::prost::alloc::string::String, ::prost::alloc::string::String>,
6163    /// Map SIP headers from 200 OK to sip.h.* participant attributes automatically.
6164    ///
6165    /// When the names of required headers is known, using headers_to_attributes is strongly recommended.
6166    ///
6167    /// When mapping 200 OK headers to follow-up request headers with attributes_to_headers map,
6168    /// lowercase header names should be used, for example: sip.h.x-custom-header.
6169    #[prost(enumeration = "SipHeaderOptions", tag = "12")]
6170    pub include_headers: i32,
6171    #[deprecated]
6172    #[prost(enumeration = "SipMediaEncryption", tag = "13")]
6173    pub media_encryption: i32,
6174    #[prost(message, optional, tag = "18")]
6175    pub media: ::core::option::Option<SipMediaConfig>,
6176    /// Optional custom hostname for the 'From' SIP header in outbound INVITEs.
6177    /// When set, outbound calls from this trunk will use this host instead of the default project SIP domain.
6178    /// Enables originating calls from custom domains.
6179    #[prost(string, tag = "15")]
6180    pub from_host: ::prost::alloc::string::String,
6181    #[prost(message, optional, tag = "16")]
6182    pub created_at: ::core::option::Option<::pbjson_types::Timestamp>,
6183    #[prost(message, optional, tag = "17")]
6184    pub updated_at: ::core::option::Option<::pbjson_types::Timestamp>,
6185}
6186#[derive(Clone, PartialEq, ::prost::Message)]
6187pub struct SipOutboundTrunkUpdate {
6188    #[prost(string, optional, tag = "1")]
6189    pub address: ::core::option::Option<::prost::alloc::string::String>,
6190    #[prost(enumeration = "SipTransport", optional, tag = "2")]
6191    pub transport: ::core::option::Option<i32>,
6192    #[prost(string, optional, tag = "9")]
6193    pub destination_country: ::core::option::Option<::prost::alloc::string::String>,
6194    #[prost(message, optional, tag = "3")]
6195    pub numbers: ::core::option::Option<ListUpdate>,
6196    #[prost(string, optional, tag = "4")]
6197    pub auth_username: ::core::option::Option<::prost::alloc::string::String>,
6198    #[prost(string, optional, tag = "5")]
6199    pub auth_password: ::core::option::Option<::prost::alloc::string::String>,
6200    #[prost(string, optional, tag = "6")]
6201    pub name: ::core::option::Option<::prost::alloc::string::String>,
6202    #[prost(string, optional, tag = "7")]
6203    pub metadata: ::core::option::Option<::prost::alloc::string::String>,
6204    #[deprecated]
6205    #[prost(enumeration = "SipMediaEncryption", optional, tag = "8")]
6206    pub media_encryption: ::core::option::Option<i32>,
6207    #[prost(message, optional, tag = "11")]
6208    pub media: ::core::option::Option<SipMediaConfig>,
6209    #[prost(string, optional, tag = "10")]
6210    pub from_host: ::core::option::Option<::prost::alloc::string::String>,
6211}
6212#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
6213pub struct GetSipInboundTrunkRequest {
6214    #[prost(string, tag = "1")]
6215    pub sip_trunk_id: ::prost::alloc::string::String,
6216}
6217#[derive(Clone, PartialEq, ::prost::Message)]
6218pub struct GetSipInboundTrunkResponse {
6219    #[prost(message, optional, tag = "1")]
6220    pub trunk: ::core::option::Option<SipInboundTrunkInfo>,
6221}
6222#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
6223pub struct GetSipOutboundTrunkRequest {
6224    #[prost(string, tag = "1")]
6225    pub sip_trunk_id: ::prost::alloc::string::String,
6226}
6227#[derive(Clone, PartialEq, ::prost::Message)]
6228pub struct GetSipOutboundTrunkResponse {
6229    #[prost(message, optional, tag = "1")]
6230    pub trunk: ::core::option::Option<SipOutboundTrunkInfo>,
6231}
6232#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
6233pub struct ListSipTrunkRequest {
6234    #[prost(message, optional, tag = "1")]
6235    pub page: ::core::option::Option<Pagination>,
6236}
6237#[derive(Clone, PartialEq, ::prost::Message)]
6238pub struct ListSipTrunkResponse {
6239    #[prost(message, repeated, tag = "1")]
6240    pub items: ::prost::alloc::vec::Vec<SipTrunkInfo>,
6241}
6242/// ListSIPInboundTrunkRequest lists inbound trunks for given filters. If no filters are set, all trunks are listed.
6243#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
6244pub struct ListSipInboundTrunkRequest {
6245    #[prost(message, optional, tag = "3")]
6246    pub page: ::core::option::Option<Pagination>,
6247    /// Trunk IDs to list. If this option is set, the response will contains trunks in the same order.
6248    /// If any of the trunks is missing, a nil item in that position will be sent in the response.
6249    #[prost(string, repeated, tag = "1")]
6250    pub trunk_ids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
6251    /// Only list trunks that contain one of the numbers, including wildcard trunks.
6252    #[prost(string, repeated, tag = "2")]
6253    pub numbers: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
6254}
6255#[derive(Clone, PartialEq, ::prost::Message)]
6256pub struct ListSipInboundTrunkResponse {
6257    #[prost(message, repeated, tag = "1")]
6258    pub items: ::prost::alloc::vec::Vec<SipInboundTrunkInfo>,
6259}
6260/// ListSIPOutboundTrunkRequest lists outbound trunks for given filters. If no filters are set, all trunks are listed.
6261#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
6262pub struct ListSipOutboundTrunkRequest {
6263    #[prost(message, optional, tag = "3")]
6264    pub page: ::core::option::Option<Pagination>,
6265    /// Trunk IDs to list. If this option is set, the response will contains trunks in the same order.
6266    /// If any of the trunks is missing, a nil item in that position will be sent in the response.
6267    #[prost(string, repeated, tag = "1")]
6268    pub trunk_ids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
6269    /// Only list trunks that contain one of the numbers, including wildcard trunks.
6270    #[prost(string, repeated, tag = "2")]
6271    pub numbers: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
6272}
6273#[derive(Clone, PartialEq, ::prost::Message)]
6274pub struct ListSipOutboundTrunkResponse {
6275    #[prost(message, repeated, tag = "1")]
6276    pub items: ::prost::alloc::vec::Vec<SipOutboundTrunkInfo>,
6277}
6278#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
6279pub struct DeleteSipTrunkRequest {
6280    #[prost(string, tag = "1")]
6281    pub sip_trunk_id: ::prost::alloc::string::String,
6282}
6283#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
6284pub struct SipDispatchRuleDirect {
6285    /// What room should call be directed into
6286    #[prost(string, tag = "1")]
6287    pub room_name: ::prost::alloc::string::String,
6288    /// Optional pin required to enter room
6289    #[prost(string, tag = "2")]
6290    pub pin: ::prost::alloc::string::String,
6291}
6292#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
6293pub struct SipDispatchRuleIndividual {
6294    /// Prefix used on new room name
6295    #[prost(string, tag = "1")]
6296    pub room_prefix: ::prost::alloc::string::String,
6297    /// Optional pin required to enter room
6298    #[prost(string, tag = "2")]
6299    pub pin: ::prost::alloc::string::String,
6300    /// Optionally append random suffix
6301    #[prost(bool, tag = "3")]
6302    pub no_randomness: bool,
6303}
6304#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
6305pub struct SipDispatchRuleCallee {
6306    /// Prefix used on new room name
6307    #[prost(string, tag = "1")]
6308    pub room_prefix: ::prost::alloc::string::String,
6309    /// Optional pin required to enter room
6310    #[prost(string, tag = "2")]
6311    pub pin: ::prost::alloc::string::String,
6312    /// Optionally append random suffix
6313    #[prost(bool, tag = "3")]
6314    pub randomize: bool,
6315}
6316#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
6317pub struct SipDispatchRule {
6318    #[prost(oneof = "sip_dispatch_rule::Rule", tags = "1, 2, 3")]
6319    pub rule: ::core::option::Option<sip_dispatch_rule::Rule>,
6320}
6321/// Nested message and enum types in `SIPDispatchRule`.
6322pub mod sip_dispatch_rule {
6323    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Oneof)]
6324    pub enum Rule {
6325        /// SIPDispatchRuleDirect is a `SIP Dispatch Rule` that puts a user directly into a room
6326        /// This places users into an existing room. Optionally you can require a pin before a user can
6327        /// enter the room
6328        #[prost(message, tag = "1")]
6329        DispatchRuleDirect(super::SipDispatchRuleDirect),
6330        /// SIPDispatchRuleIndividual is a `SIP Dispatch Rule` that creates a new room for each caller.
6331        #[prost(message, tag = "2")]
6332        DispatchRuleIndividual(super::SipDispatchRuleIndividual),
6333        /// SIPDispatchRuleCallee is a `SIP Dispatch Rule` that creates a new room for each callee.
6334        #[prost(message, tag = "3")]
6335        DispatchRuleCallee(super::SipDispatchRuleCallee),
6336    }
6337}
6338#[derive(Clone, PartialEq, ::prost::Message)]
6339pub struct CreateSipDispatchRuleRequest {
6340    /// Rule ID is ignored
6341    #[prost(message, optional, tag = "10")]
6342    pub dispatch_rule: ::core::option::Option<SipDispatchRuleInfo>,
6343    #[deprecated]
6344    #[prost(message, optional, tag = "1")]
6345    pub rule: ::core::option::Option<SipDispatchRule>,
6346    /// What trunks are accepted for this dispatch rule
6347    /// If empty all trunks will match this dispatch rule
6348    #[deprecated]
6349    #[prost(string, repeated, tag = "2")]
6350    pub trunk_ids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
6351    /// By default the From value (Phone number) is used for participant name/identity and added to attributes.
6352    /// If true, a random value for identity will be used and numbers will be omitted from attributes.
6353    #[deprecated]
6354    #[prost(bool, tag = "3")]
6355    pub hide_phone_number: bool,
6356    /// Dispatch Rule will only accept a call made to these numbers (if set).
6357    #[deprecated]
6358    #[prost(string, repeated, tag = "6")]
6359    pub inbound_numbers: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
6360    /// Optional human-readable name for the Dispatch Rule.
6361    #[deprecated]
6362    #[prost(string, tag = "4")]
6363    pub name: ::prost::alloc::string::String,
6364    /// User-defined metadata for the Dispatch Rule.
6365    /// Participants created by this rule will inherit this metadata.
6366    #[deprecated]
6367    #[prost(string, tag = "5")]
6368    pub metadata: ::prost::alloc::string::String,
6369    /// User-defined attributes for the Dispatch Rule.
6370    /// Participants created by this rule will inherit these attributes.
6371    #[prost(map = "string, string", tag = "7")]
6372    pub attributes: ::std::collections::HashMap<::prost::alloc::string::String, ::prost::alloc::string::String>,
6373    /// Cloud-only, config preset to use
6374    #[deprecated]
6375    #[prost(string, tag = "8")]
6376    pub room_preset: ::prost::alloc::string::String,
6377    /// RoomConfiguration to use if the participant initiates the room
6378    #[deprecated]
6379    #[prost(message, optional, tag = "9")]
6380    pub room_config: ::core::option::Option<RoomConfiguration>,
6381}
6382#[derive(Clone, PartialEq, ::prost::Message)]
6383pub struct UpdateSipDispatchRuleRequest {
6384    #[prost(string, tag = "1")]
6385    pub sip_dispatch_rule_id: ::prost::alloc::string::String,
6386    #[prost(oneof = "update_sip_dispatch_rule_request::Action", tags = "2, 3")]
6387    pub action: ::core::option::Option<update_sip_dispatch_rule_request::Action>,
6388}
6389/// Nested message and enum types in `UpdateSIPDispatchRuleRequest`.
6390pub mod update_sip_dispatch_rule_request {
6391    #[derive(Clone, PartialEq, ::prost::Oneof)]
6392    pub enum Action {
6393        #[prost(message, tag = "2")]
6394        Replace(super::SipDispatchRuleInfo),
6395        #[prost(message, tag = "3")]
6396        Update(super::SipDispatchRuleUpdate),
6397    }
6398}
6399#[derive(Clone, PartialEq, ::prost::Message)]
6400pub struct SipDispatchRuleInfo {
6401    #[prost(string, tag = "1")]
6402    pub sip_dispatch_rule_id: ::prost::alloc::string::String,
6403    #[prost(message, optional, tag = "2")]
6404    pub rule: ::core::option::Option<SipDispatchRule>,
6405    #[prost(string, repeated, tag = "3")]
6406    pub trunk_ids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
6407    #[prost(bool, tag = "4")]
6408    pub hide_phone_number: bool,
6409    /// Dispatch Rule will only accept a call made from these numbers (if set).
6410    #[prost(string, repeated, tag = "7")]
6411    pub inbound_numbers: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
6412    /// Dispatch Rule will only accept a call made to these numbers (if set).
6413    #[prost(string, repeated, tag = "13")]
6414    pub numbers: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
6415    /// Human-readable name for the Dispatch Rule.
6416    #[prost(string, tag = "5")]
6417    pub name: ::prost::alloc::string::String,
6418    /// User-defined metadata for the Dispatch Rule.
6419    /// Participants created by this rule will inherit this metadata.
6420    #[prost(string, tag = "6")]
6421    pub metadata: ::prost::alloc::string::String,
6422    /// User-defined attributes for the Dispatch Rule.
6423    /// Participants created by this rule will inherit these attributes.
6424    #[prost(map = "string, string", tag = "8")]
6425    pub attributes: ::std::collections::HashMap<::prost::alloc::string::String, ::prost::alloc::string::String>,
6426    /// Cloud-only, config preset to use
6427    #[prost(string, tag = "9")]
6428    pub room_preset: ::prost::alloc::string::String,
6429    /// RoomConfiguration to use if the participant initiates the room
6430    #[prost(message, optional, tag = "10")]
6431    pub room_config: ::core::option::Option<RoomConfiguration>,
6432    #[prost(message, optional, tag = "16")]
6433    pub media: ::core::option::Option<SipMediaConfig>,
6434    #[prost(bool, tag = "11")]
6435    pub krisp_enabled: bool,
6436    #[deprecated]
6437    #[prost(enumeration = "SipMediaEncryption", tag = "12")]
6438    pub media_encryption: i32,
6439    #[prost(message, optional, tag = "14")]
6440    pub created_at: ::core::option::Option<::pbjson_types::Timestamp>,
6441    #[prost(message, optional, tag = "15")]
6442    pub updated_at: ::core::option::Option<::pbjson_types::Timestamp>,
6443}
6444#[derive(Clone, PartialEq, ::prost::Message)]
6445pub struct SipDispatchRuleUpdate {
6446    #[prost(message, optional, tag = "1")]
6447    pub trunk_ids: ::core::option::Option<ListUpdate>,
6448    #[prost(message, optional, tag = "2")]
6449    pub rule: ::core::option::Option<SipDispatchRule>,
6450    #[prost(string, optional, tag = "3")]
6451    pub name: ::core::option::Option<::prost::alloc::string::String>,
6452    #[prost(string, optional, tag = "4")]
6453    pub metadata: ::core::option::Option<::prost::alloc::string::String>,
6454    #[prost(map = "string, string", tag = "5")]
6455    pub attributes: ::std::collections::HashMap<::prost::alloc::string::String, ::prost::alloc::string::String>,
6456    #[deprecated]
6457    #[prost(enumeration = "SipMediaEncryption", optional, tag = "6")]
6458    pub media_encryption: ::core::option::Option<i32>,
6459    #[prost(message, optional, tag = "7")]
6460    pub media: ::core::option::Option<SipMediaConfig>,
6461}
6462/// ListSIPDispatchRuleRequest lists dispatch rules for given filters. If no filters are set, all rules are listed.
6463#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
6464pub struct ListSipDispatchRuleRequest {
6465    #[prost(message, optional, tag = "3")]
6466    pub page: ::core::option::Option<Pagination>,
6467    /// Rule IDs to list. If this option is set, the response will contains rules in the same order.
6468    /// If any of the rules is missing, a nil item in that position will be sent in the response.
6469    #[prost(string, repeated, tag = "1")]
6470    pub dispatch_rule_ids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
6471    /// Only list rules that contain one of the Trunk IDs, including wildcard rules.
6472    #[prost(string, repeated, tag = "2")]
6473    pub trunk_ids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
6474}
6475#[derive(Clone, PartialEq, ::prost::Message)]
6476pub struct ListSipDispatchRuleResponse {
6477    #[prost(message, repeated, tag = "1")]
6478    pub items: ::prost::alloc::vec::Vec<SipDispatchRuleInfo>,
6479}
6480#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
6481pub struct DeleteSipDispatchRuleRequest {
6482    #[prost(string, tag = "1")]
6483    pub sip_dispatch_rule_id: ::prost::alloc::string::String,
6484}
6485#[derive(Clone, PartialEq, ::prost::Message)]
6486pub struct SipOutboundConfig {
6487    /// SIP server address
6488    #[prost(string, tag = "1")]
6489    pub hostname: ::prost::alloc::string::String,
6490    /// country where the call terminates as ISO 3166-1 alpha-2 (<https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2>). This will be used by the livekit infrastructure to route calls.
6491    #[prost(string, tag = "7")]
6492    pub destination_country: ::prost::alloc::string::String,
6493    /// SIP Transport used for outbound call.
6494    #[prost(enumeration = "SipTransport", tag = "2")]
6495    pub transport: i32,
6496    /// Username and password used to authenticate with SIP server.
6497    /// May be empty to have no authentication.
6498    #[prost(string, tag = "3")]
6499    pub auth_username: ::prost::alloc::string::String,
6500    #[prost(string, tag = "4")]
6501    pub auth_password: ::prost::alloc::string::String,
6502    /// Map SIP X-* headers from 200 OK to SIP participant attributes.
6503    /// Keys are the names of X-* headers and values are the names of attributes they will be mapped to.
6504    #[prost(map = "string, string", tag = "5")]
6505    pub headers_to_attributes: ::std::collections::HashMap<::prost::alloc::string::String, ::prost::alloc::string::String>,
6506    /// Map LiveKit attributes to SIP X-* headers when sending BYE or REFER requests.
6507    /// Keys are the names of attributes and values are the names of X-* headers they will be mapped to.
6508    #[prost(map = "string, string", tag = "6")]
6509    pub attributes_to_headers: ::std::collections::HashMap<::prost::alloc::string::String, ::prost::alloc::string::String>,
6510    /// Optional custom hostname for the 'From' SIP header. When set, outbound calls use this host instead of the default project SIP domain.
6511    #[prost(string, tag = "8")]
6512    pub from_host: ::prost::alloc::string::String,
6513}
6514/// A SIP Participant is a singular SIP session connected to a LiveKit room via
6515/// a SIP Trunk into a SIP DispatchRule
6516#[derive(Clone, PartialEq, ::prost::Message)]
6517pub struct CreateSipParticipantRequest {
6518    /// What SIP Trunk should be used to dial the user
6519    #[prost(string, tag = "1")]
6520    pub sip_trunk_id: ::prost::alloc::string::String,
6521    #[prost(message, optional, tag = "20")]
6522    pub trunk: ::core::option::Option<SipOutboundConfig>,
6523    /// INVITE <uri>
6524    #[prost(message, optional, tag = "24")]
6525    pub sip_request_uri: ::core::option::Option<SipRequestDest>,
6526    /// To:   "Name" <uri>
6527    #[prost(message, optional, tag = "25")]
6528    pub sip_to_header: ::core::option::Option<SipNamedDest>,
6529    /// From: "Name" <uri>
6530    #[prost(message, optional, tag = "26")]
6531    pub sip_from_header: ::core::option::Option<SipNamedDest>,
6532    /// What number should be dialed via SIP
6533    #[prost(string, tag = "2")]
6534    pub sip_call_to: ::prost::alloc::string::String,
6535    /// Optional SIP From number to use. If empty, trunk number is used.
6536    #[prost(string, tag = "15")]
6537    pub sip_number: ::prost::alloc::string::String,
6538    /// What LiveKit room should this participant be connected too
6539    #[prost(string, tag = "3")]
6540    pub room_name: ::prost::alloc::string::String,
6541    /// Optional identity of the participant in LiveKit room
6542    #[prost(string, tag = "4")]
6543    pub participant_identity: ::prost::alloc::string::String,
6544    /// Optional name of the participant in LiveKit room
6545    #[prost(string, tag = "7")]
6546    pub participant_name: ::prost::alloc::string::String,
6547    /// Optional user-defined metadata. Will be attached to a created Participant in the room.
6548    #[prost(string, tag = "8")]
6549    pub participant_metadata: ::prost::alloc::string::String,
6550    /// Optional user-defined attributes. Will be attached to a created Participant in the room.
6551    #[prost(map = "string, string", tag = "9")]
6552    pub participant_attributes: ::std::collections::HashMap<::prost::alloc::string::String, ::prost::alloc::string::String>,
6553    /// Optionally send following DTMF digits (extension codes) when making a call.
6554    /// Character 'w' can be used to add a 0.5 sec delay.
6555    #[prost(string, tag = "5")]
6556    pub dtmf: ::prost::alloc::string::String,
6557    /// Optionally play dialtone in the room as an audible indicator for existing participants. The `play_ringtone` option is deprectated but has the same effect.
6558    #[deprecated]
6559    #[prost(bool, tag = "6")]
6560    pub play_ringtone: bool,
6561    #[prost(bool, tag = "13")]
6562    pub play_dialtone: bool,
6563    /// By default the From value (Phone number) is used for participant name/identity (if not set) and added to attributes.
6564    /// If true, a random value for identity will be used and numbers will be omitted from attributes.
6565    #[prost(bool, tag = "10")]
6566    pub hide_phone_number: bool,
6567    /// These headers are sent as-is and may help identify this call as coming from LiveKit for the other SIP endpoint.
6568    #[prost(map = "string, string", tag = "16")]
6569    pub headers: ::std::collections::HashMap<::prost::alloc::string::String, ::prost::alloc::string::String>,
6570    /// Map SIP headers from 200 OK to sip.h.* participant attributes automatically.
6571    ///
6572    /// When the names of required headers is known, using headers_to_attributes is strongly recommended.
6573    ///
6574    /// When mapping 200 OK headers to follow-up request headers with attributes_to_headers map,
6575    /// lowercase header names should be used, for example: sip.h.x-custom-header.
6576    #[prost(enumeration = "SipHeaderOptions", tag = "17")]
6577    pub include_headers: i32,
6578    /// Max time for the callee to answer the call.
6579    #[prost(message, optional, tag = "11")]
6580    pub ringing_timeout: ::core::option::Option<::pbjson_types::Duration>,
6581    /// Max call duration.
6582    #[prost(message, optional, tag = "12")]
6583    pub max_call_duration: ::core::option::Option<::pbjson_types::Duration>,
6584    /// Enable voice isolation for the callee.
6585    #[prost(bool, tag = "14")]
6586    pub krisp_enabled: bool,
6587    #[deprecated]
6588    #[prost(enumeration = "SipMediaEncryption", tag = "18")]
6589    pub media_encryption: i32,
6590    #[prost(message, optional, tag = "23")]
6591    pub media: ::core::option::Option<SipMediaConfig>,
6592    /// Wait for the answer for the call before returning.
6593    #[prost(bool, tag = "19")]
6594    pub wait_until_answered: bool,
6595    /// Optional display name for the 'From' SIP header.
6596    ///
6597    /// Cases:
6598    /// 1) Unspecified: Use legacy behavior - display name will be set to be the caller's number.
6599    /// 2) Empty string: Do not send a display name, which will result in a CNAM lookup downstream.
6600    /// 3) Non-empty: Use the specified value as the display name.
6601    #[prost(string, optional, tag = "21")]
6602    pub display_name: ::core::option::Option<::prost::alloc::string::String>,
6603    /// NEXT ID: 27
6604    #[prost(message, optional, tag = "22")]
6605    pub destination: ::core::option::Option<Destination>,
6606}
6607#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
6608pub struct SipParticipantInfo {
6609    #[prost(string, tag = "1")]
6610    pub participant_id: ::prost::alloc::string::String,
6611    #[prost(string, tag = "2")]
6612    pub participant_identity: ::prost::alloc::string::String,
6613    #[prost(string, tag = "3")]
6614    pub room_name: ::prost::alloc::string::String,
6615    #[prost(string, tag = "4")]
6616    pub sip_call_id: ::prost::alloc::string::String,
6617}
6618#[derive(Clone, PartialEq, ::prost::Message)]
6619pub struct TransferSipParticipantRequest {
6620    #[prost(string, tag = "1")]
6621    pub participant_identity: ::prost::alloc::string::String,
6622    #[prost(string, tag = "2")]
6623    pub room_name: ::prost::alloc::string::String,
6624    #[prost(string, tag = "3")]
6625    pub transfer_to: ::prost::alloc::string::String,
6626    /// Optionally play dialtone to the SIP participant as an audible indicator of being transferred
6627    #[prost(bool, tag = "4")]
6628    pub play_dialtone: bool,
6629    /// Add the following headers to the REFER SIP request.
6630    #[prost(map = "string, string", tag = "5")]
6631    pub headers: ::std::collections::HashMap<::prost::alloc::string::String, ::prost::alloc::string::String>,
6632    /// Max time for the transfer destination to answer the call.
6633    #[prost(message, optional, tag = "6")]
6634    pub ringing_timeout: ::core::option::Option<::pbjson_types::Duration>,
6635}
6636#[derive(Clone, PartialEq, ::prost::Message)]
6637pub struct SipCallInfo {
6638    #[prost(string, tag = "1")]
6639    pub call_id: ::prost::alloc::string::String,
6640    #[prost(string, tag = "2")]
6641    pub trunk_id: ::prost::alloc::string::String,
6642    #[prost(string, tag = "16")]
6643    pub dispatch_rule_id: ::prost::alloc::string::String,
6644    #[prost(string, tag = "17")]
6645    pub region: ::prost::alloc::string::String,
6646    #[prost(string, tag = "3")]
6647    pub room_name: ::prost::alloc::string::String,
6648    /// ID of the current/previous room published to
6649    #[prost(string, tag = "4")]
6650    pub room_id: ::prost::alloc::string::String,
6651    #[prost(string, tag = "5")]
6652    pub participant_identity: ::prost::alloc::string::String,
6653    #[prost(map = "string, string", tag = "18")]
6654    pub participant_attributes: ::std::collections::HashMap<::prost::alloc::string::String, ::prost::alloc::string::String>,
6655    #[prost(message, optional, tag = "6")]
6656    pub from_uri: ::core::option::Option<SipUri>,
6657    #[prost(message, optional, tag = "7")]
6658    pub to_uri: ::core::option::Option<SipUri>,
6659    #[deprecated]
6660    #[prost(int64, tag = "9")]
6661    pub created_at: i64,
6662    #[deprecated]
6663    #[prost(int64, tag = "10")]
6664    pub started_at: i64,
6665    #[deprecated]
6666    #[prost(int64, tag = "11")]
6667    pub ended_at: i64,
6668    #[prost(enumeration = "SipFeature", repeated, tag = "14")]
6669    pub enabled_features: ::prost::alloc::vec::Vec<i32>,
6670    #[prost(enumeration = "SipCallDirection", tag = "15")]
6671    pub call_direction: i32,
6672    #[prost(enumeration = "SipCallStatus", tag = "8")]
6673    pub call_status: i32,
6674    #[prost(int64, tag = "22")]
6675    pub created_at_ns: i64,
6676    #[prost(int64, tag = "23")]
6677    pub started_at_ns: i64,
6678    #[prost(int64, tag = "24")]
6679    pub ended_at_ns: i64,
6680    #[prost(enumeration = "DisconnectReason", tag = "12")]
6681    pub disconnect_reason: i32,
6682    #[prost(string, tag = "13")]
6683    pub error: ::prost::alloc::string::String,
6684    #[prost(message, optional, tag = "19")]
6685    pub call_status_code: ::core::option::Option<SipStatus>,
6686    #[prost(string, tag = "20")]
6687    pub audio_codec: ::prost::alloc::string::String,
6688    #[prost(string, tag = "21")]
6689    pub media_encryption: ::prost::alloc::string::String,
6690    #[prost(string, tag = "25")]
6691    pub pcap_file_link: ::prost::alloc::string::String,
6692    #[prost(message, repeated, tag = "26")]
6693    pub call_context: ::prost::alloc::vec::Vec<::pbjson_types::Any>,
6694    #[prost(message, optional, tag = "27")]
6695    pub provider_info: ::core::option::Option<ProviderInfo>,
6696    #[prost(string, tag = "28")]
6697    pub sip_call_id: ::prost::alloc::string::String,
6698}
6699#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
6700pub struct SipTransferInfo {
6701    #[prost(string, tag = "1")]
6702    pub transfer_id: ::prost::alloc::string::String,
6703    #[prost(string, tag = "2")]
6704    pub call_id: ::prost::alloc::string::String,
6705    #[prost(string, tag = "3")]
6706    pub transfer_to: ::prost::alloc::string::String,
6707    #[prost(int64, tag = "4")]
6708    pub transfer_initiated_at_ns: i64,
6709    #[prost(int64, tag = "5")]
6710    pub transfer_completed_at_ns: i64,
6711    #[prost(enumeration = "SipTransferStatus", tag = "6")]
6712    pub transfer_status: i32,
6713    #[prost(string, tag = "7")]
6714    pub error: ::prost::alloc::string::String,
6715    #[prost(message, optional, tag = "8")]
6716    pub transfer_status_code: ::core::option::Option<SipStatus>,
6717}
6718#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
6719pub struct SipUri {
6720    #[prost(string, tag = "1")]
6721    pub user: ::prost::alloc::string::String,
6722    #[prost(string, tag = "2")]
6723    pub host: ::prost::alloc::string::String,
6724    #[prost(string, tag = "3")]
6725    pub ip: ::prost::alloc::string::String,
6726    #[prost(uint32, tag = "4")]
6727    pub port: u32,
6728    #[prost(enumeration = "SipTransport", tag = "5")]
6729    pub transport: i32,
6730}
6731#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
6732pub struct SipRequestDest {
6733    #[prost(oneof = "sip_request_dest::Uri", tags = "1, 2")]
6734    pub uri: ::core::option::Option<sip_request_dest::Uri>,
6735}
6736/// Nested message and enum types in `SIPRequestDest`.
6737pub mod sip_request_dest {
6738    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Oneof)]
6739    pub enum Uri {
6740        /// <sip:user@sip.example.com:5060;transport=tcp>
6741        #[prost(string, tag = "1")]
6742        Raw(::prost::alloc::string::String),
6743        #[prost(message, tag = "2")]
6744        Values(super::SipUri),
6745    }
6746}
6747#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
6748pub struct SipNamedDest {
6749    #[prost(string, tag = "3")]
6750    pub display_name: ::prost::alloc::string::String,
6751    #[prost(oneof = "sip_named_dest::Uri", tags = "1, 2")]
6752    pub uri: ::core::option::Option<sip_named_dest::Uri>,
6753}
6754/// Nested message and enum types in `SIPNamedDest`.
6755pub mod sip_named_dest {
6756    #[derive(Clone, PartialEq, Eq, Hash, ::prost::Oneof)]
6757    pub enum Uri {
6758        /// <sip:user@sip.example.com:5060;transport=tcp>
6759        #[prost(string, tag = "1")]
6760        Raw(::prost::alloc::string::String),
6761        #[prost(message, tag = "2")]
6762        Values(super::SipUri),
6763    }
6764}
6765#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
6766pub struct Destination {
6767    #[prost(string, tag = "1")]
6768    pub city: ::prost::alloc::string::String,
6769    #[prost(string, tag = "2")]
6770    pub country: ::prost::alloc::string::String,
6771    #[prost(string, tag = "3")]
6772    pub region: ::prost::alloc::string::String,
6773}
6774#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
6775#[repr(i32)]
6776pub enum SipStatusCode {
6777    SipStatusUnknown = 0,
6778    SipStatusTrying = 100,
6779    SipStatusRinging = 180,
6780    SipStatusCallIsForwarded = 181,
6781    SipStatusQueued = 182,
6782    SipStatusSessionProgress = 183,
6783    SipStatusEarlyDialogTerminated = 199,
6784    SipStatusOk = 200,
6785    SipStatusAccepted = 202,
6786    SipStatusNoNotification = 204,
6787    SipStatusMultipleChoices = 300,
6788    SipStatusMovedPermanently = 301,
6789    SipStatusMovedTemporarily = 302,
6790    SipStatusUseProxy = 305,
6791    SipStatusAlternativeService = 380,
6792    SipStatusBadRequest = 400,
6793    SipStatusUnauthorized = 401,
6794    SipStatusPaymentRequired = 402,
6795    SipStatusForbidden = 403,
6796    SipStatusNotfound = 404,
6797    SipStatusMethodNotAllowed = 405,
6798    SipStatusNotAcceptable = 406,
6799    SipStatusProxyAuthRequired = 407,
6800    SipStatusRequestTimeout = 408,
6801    SipStatusConflict = 409,
6802    SipStatusGone = 410,
6803    SipStatusLengthRequired = 411,
6804    SipStatusConditionalRequestFailed = 412,
6805    SipStatusRequestEntityTooLarge = 413,
6806    SipStatusRequestUriTooLong = 414,
6807    SipStatusUnsupportedMediaType = 415,
6808    SipStatusRequestedRangeNotSatisfiable = 416,
6809    SipStatusUnknownResourcePriority = 417,
6810    SipStatusBadExtension = 420,
6811    SipStatusExtensionRequired = 421,
6812    SipStatusSessionIntervalTooSmall = 422,
6813    SipStatusIntervalTooBrief = 423,
6814    SipStatusBadLocationInformation = 424,
6815    SipStatusBadAlertMessage = 425,
6816    SipStatusUseIdentityHeader = 428,
6817    SipStatusProvideReferrerIdentity = 429,
6818    SipStatusFlowFailed = 430,
6819    SipStatusAnonymityDisallowed = 433,
6820    SipStatusBadIdentityInfo = 436,
6821    SipStatusUnsupportedCertificate = 437,
6822    SipStatusInvalidIdentityHeader = 438,
6823    SipStatusFirstHopLacksOutboundSupport = 439,
6824    SipStatusMaxBreadthExceeded = 440,
6825    SipStatusBadInfoPackage = 469,
6826    SipStatusConsentNeeded = 470,
6827    SipStatusTemporarilyUnavailable = 480,
6828    SipStatusCallTransactionDoesNotExists = 481,
6829    SipStatusLoopDetected = 482,
6830    SipStatusTooManyHops = 483,
6831    SipStatusAddressIncomplete = 484,
6832    SipStatusAmbiguous = 485,
6833    SipStatusBusyHere = 486,
6834    SipStatusRequestTerminated = 487,
6835    SipStatusNotAcceptableHere = 488,
6836    SipStatusBadEvent = 489,
6837    SipStatusRequestPending = 491,
6838    SipStatusUndecipherable = 493,
6839    SipStatusSecurityAgreementRequired = 494,
6840    SipStatusInternalServerError = 500,
6841    SipStatusNotImplemented = 501,
6842    SipStatusBadGateway = 502,
6843    SipStatusServiceUnavailable = 503,
6844    SipStatusGatewayTimeout = 504,
6845    SipStatusVersionNotSupported = 505,
6846    SipStatusMessageTooLarge = 513,
6847    SipStatusGlobalBusyEverywhere = 600,
6848    SipStatusGlobalDecline = 603,
6849    SipStatusGlobalDoesNotExistAnywhere = 604,
6850    SipStatusGlobalNotAcceptable = 606,
6851    SipStatusGlobalUnwanted = 607,
6852    SipStatusGlobalRejected = 608,
6853}
6854impl SipStatusCode {
6855    /// String value of the enum field names used in the ProtoBuf definition.
6856    ///
6857    /// The values are not transformed in any way and thus are considered stable
6858    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
6859    pub fn as_str_name(&self) -> &'static str {
6860        match self {
6861            Self::SipStatusUnknown => "SIP_STATUS_UNKNOWN",
6862            Self::SipStatusTrying => "SIP_STATUS_TRYING",
6863            Self::SipStatusRinging => "SIP_STATUS_RINGING",
6864            Self::SipStatusCallIsForwarded => "SIP_STATUS_CALL_IS_FORWARDED",
6865            Self::SipStatusQueued => "SIP_STATUS_QUEUED",
6866            Self::SipStatusSessionProgress => "SIP_STATUS_SESSION_PROGRESS",
6867            Self::SipStatusEarlyDialogTerminated => "SIP_STATUS_EARLY_DIALOG_TERMINATED",
6868            Self::SipStatusOk => "SIP_STATUS_OK",
6869            Self::SipStatusAccepted => "SIP_STATUS_ACCEPTED",
6870            Self::SipStatusNoNotification => "SIP_STATUS_NO_NOTIFICATION",
6871            Self::SipStatusMultipleChoices => "SIP_STATUS_MULTIPLE_CHOICES",
6872            Self::SipStatusMovedPermanently => "SIP_STATUS_MOVED_PERMANENTLY",
6873            Self::SipStatusMovedTemporarily => "SIP_STATUS_MOVED_TEMPORARILY",
6874            Self::SipStatusUseProxy => "SIP_STATUS_USE_PROXY",
6875            Self::SipStatusAlternativeService => "SIP_STATUS_ALTERNATIVE_SERVICE",
6876            Self::SipStatusBadRequest => "SIP_STATUS_BAD_REQUEST",
6877            Self::SipStatusUnauthorized => "SIP_STATUS_UNAUTHORIZED",
6878            Self::SipStatusPaymentRequired => "SIP_STATUS_PAYMENT_REQUIRED",
6879            Self::SipStatusForbidden => "SIP_STATUS_FORBIDDEN",
6880            Self::SipStatusNotfound => "SIP_STATUS_NOTFOUND",
6881            Self::SipStatusMethodNotAllowed => "SIP_STATUS_METHOD_NOT_ALLOWED",
6882            Self::SipStatusNotAcceptable => "SIP_STATUS_NOT_ACCEPTABLE",
6883            Self::SipStatusProxyAuthRequired => "SIP_STATUS_PROXY_AUTH_REQUIRED",
6884            Self::SipStatusRequestTimeout => "SIP_STATUS_REQUEST_TIMEOUT",
6885            Self::SipStatusConflict => "SIP_STATUS_CONFLICT",
6886            Self::SipStatusGone => "SIP_STATUS_GONE",
6887            Self::SipStatusLengthRequired => "SIP_STATUS_LENGTH_REQUIRED",
6888            Self::SipStatusConditionalRequestFailed => "SIP_STATUS_CONDITIONAL_REQUEST_FAILED",
6889            Self::SipStatusRequestEntityTooLarge => "SIP_STATUS_REQUEST_ENTITY_TOO_LARGE",
6890            Self::SipStatusRequestUriTooLong => "SIP_STATUS_REQUEST_URI_TOO_LONG",
6891            Self::SipStatusUnsupportedMediaType => "SIP_STATUS_UNSUPPORTED_MEDIA_TYPE",
6892            Self::SipStatusRequestedRangeNotSatisfiable => "SIP_STATUS_REQUESTED_RANGE_NOT_SATISFIABLE",
6893            Self::SipStatusUnknownResourcePriority => "SIP_STATUS_UNKNOWN_RESOURCE_PRIORITY",
6894            Self::SipStatusBadExtension => "SIP_STATUS_BAD_EXTENSION",
6895            Self::SipStatusExtensionRequired => "SIP_STATUS_EXTENSION_REQUIRED",
6896            Self::SipStatusSessionIntervalTooSmall => "SIP_STATUS_SESSION_INTERVAL_TOO_SMALL",
6897            Self::SipStatusIntervalTooBrief => "SIP_STATUS_INTERVAL_TOO_BRIEF",
6898            Self::SipStatusBadLocationInformation => "SIP_STATUS_BAD_LOCATION_INFORMATION",
6899            Self::SipStatusBadAlertMessage => "SIP_STATUS_BAD_ALERT_MESSAGE",
6900            Self::SipStatusUseIdentityHeader => "SIP_STATUS_USE_IDENTITY_HEADER",
6901            Self::SipStatusProvideReferrerIdentity => "SIP_STATUS_PROVIDE_REFERRER_IDENTITY",
6902            Self::SipStatusFlowFailed => "SIP_STATUS_FLOW_FAILED",
6903            Self::SipStatusAnonymityDisallowed => "SIP_STATUS_ANONYMITY_DISALLOWED",
6904            Self::SipStatusBadIdentityInfo => "SIP_STATUS_BAD_IDENTITY_INFO",
6905            Self::SipStatusUnsupportedCertificate => "SIP_STATUS_UNSUPPORTED_CERTIFICATE",
6906            Self::SipStatusInvalidIdentityHeader => "SIP_STATUS_INVALID_IDENTITY_HEADER",
6907            Self::SipStatusFirstHopLacksOutboundSupport => "SIP_STATUS_FIRST_HOP_LACKS_OUTBOUND_SUPPORT",
6908            Self::SipStatusMaxBreadthExceeded => "SIP_STATUS_MAX_BREADTH_EXCEEDED",
6909            Self::SipStatusBadInfoPackage => "SIP_STATUS_BAD_INFO_PACKAGE",
6910            Self::SipStatusConsentNeeded => "SIP_STATUS_CONSENT_NEEDED",
6911            Self::SipStatusTemporarilyUnavailable => "SIP_STATUS_TEMPORARILY_UNAVAILABLE",
6912            Self::SipStatusCallTransactionDoesNotExists => "SIP_STATUS_CALL_TRANSACTION_DOES_NOT_EXISTS",
6913            Self::SipStatusLoopDetected => "SIP_STATUS_LOOP_DETECTED",
6914            Self::SipStatusTooManyHops => "SIP_STATUS_TOO_MANY_HOPS",
6915            Self::SipStatusAddressIncomplete => "SIP_STATUS_ADDRESS_INCOMPLETE",
6916            Self::SipStatusAmbiguous => "SIP_STATUS_AMBIGUOUS",
6917            Self::SipStatusBusyHere => "SIP_STATUS_BUSY_HERE",
6918            Self::SipStatusRequestTerminated => "SIP_STATUS_REQUEST_TERMINATED",
6919            Self::SipStatusNotAcceptableHere => "SIP_STATUS_NOT_ACCEPTABLE_HERE",
6920            Self::SipStatusBadEvent => "SIP_STATUS_BAD_EVENT",
6921            Self::SipStatusRequestPending => "SIP_STATUS_REQUEST_PENDING",
6922            Self::SipStatusUndecipherable => "SIP_STATUS_UNDECIPHERABLE",
6923            Self::SipStatusSecurityAgreementRequired => "SIP_STATUS_SECURITY_AGREEMENT_REQUIRED",
6924            Self::SipStatusInternalServerError => "SIP_STATUS_INTERNAL_SERVER_ERROR",
6925            Self::SipStatusNotImplemented => "SIP_STATUS_NOT_IMPLEMENTED",
6926            Self::SipStatusBadGateway => "SIP_STATUS_BAD_GATEWAY",
6927            Self::SipStatusServiceUnavailable => "SIP_STATUS_SERVICE_UNAVAILABLE",
6928            Self::SipStatusGatewayTimeout => "SIP_STATUS_GATEWAY_TIMEOUT",
6929            Self::SipStatusVersionNotSupported => "SIP_STATUS_VERSION_NOT_SUPPORTED",
6930            Self::SipStatusMessageTooLarge => "SIP_STATUS_MESSAGE_TOO_LARGE",
6931            Self::SipStatusGlobalBusyEverywhere => "SIP_STATUS_GLOBAL_BUSY_EVERYWHERE",
6932            Self::SipStatusGlobalDecline => "SIP_STATUS_GLOBAL_DECLINE",
6933            Self::SipStatusGlobalDoesNotExistAnywhere => "SIP_STATUS_GLOBAL_DOES_NOT_EXIST_ANYWHERE",
6934            Self::SipStatusGlobalNotAcceptable => "SIP_STATUS_GLOBAL_NOT_ACCEPTABLE",
6935            Self::SipStatusGlobalUnwanted => "SIP_STATUS_GLOBAL_UNWANTED",
6936            Self::SipStatusGlobalRejected => "SIP_STATUS_GLOBAL_REJECTED",
6937        }
6938    }
6939    /// Creates an enum from field names used in the ProtoBuf definition.
6940    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
6941        match value {
6942            "SIP_STATUS_UNKNOWN" => Some(Self::SipStatusUnknown),
6943            "SIP_STATUS_TRYING" => Some(Self::SipStatusTrying),
6944            "SIP_STATUS_RINGING" => Some(Self::SipStatusRinging),
6945            "SIP_STATUS_CALL_IS_FORWARDED" => Some(Self::SipStatusCallIsForwarded),
6946            "SIP_STATUS_QUEUED" => Some(Self::SipStatusQueued),
6947            "SIP_STATUS_SESSION_PROGRESS" => Some(Self::SipStatusSessionProgress),
6948            "SIP_STATUS_EARLY_DIALOG_TERMINATED" => Some(Self::SipStatusEarlyDialogTerminated),
6949            "SIP_STATUS_OK" => Some(Self::SipStatusOk),
6950            "SIP_STATUS_ACCEPTED" => Some(Self::SipStatusAccepted),
6951            "SIP_STATUS_NO_NOTIFICATION" => Some(Self::SipStatusNoNotification),
6952            "SIP_STATUS_MULTIPLE_CHOICES" => Some(Self::SipStatusMultipleChoices),
6953            "SIP_STATUS_MOVED_PERMANENTLY" => Some(Self::SipStatusMovedPermanently),
6954            "SIP_STATUS_MOVED_TEMPORARILY" => Some(Self::SipStatusMovedTemporarily),
6955            "SIP_STATUS_USE_PROXY" => Some(Self::SipStatusUseProxy),
6956            "SIP_STATUS_ALTERNATIVE_SERVICE" => Some(Self::SipStatusAlternativeService),
6957            "SIP_STATUS_BAD_REQUEST" => Some(Self::SipStatusBadRequest),
6958            "SIP_STATUS_UNAUTHORIZED" => Some(Self::SipStatusUnauthorized),
6959            "SIP_STATUS_PAYMENT_REQUIRED" => Some(Self::SipStatusPaymentRequired),
6960            "SIP_STATUS_FORBIDDEN" => Some(Self::SipStatusForbidden),
6961            "SIP_STATUS_NOTFOUND" => Some(Self::SipStatusNotfound),
6962            "SIP_STATUS_METHOD_NOT_ALLOWED" => Some(Self::SipStatusMethodNotAllowed),
6963            "SIP_STATUS_NOT_ACCEPTABLE" => Some(Self::SipStatusNotAcceptable),
6964            "SIP_STATUS_PROXY_AUTH_REQUIRED" => Some(Self::SipStatusProxyAuthRequired),
6965            "SIP_STATUS_REQUEST_TIMEOUT" => Some(Self::SipStatusRequestTimeout),
6966            "SIP_STATUS_CONFLICT" => Some(Self::SipStatusConflict),
6967            "SIP_STATUS_GONE" => Some(Self::SipStatusGone),
6968            "SIP_STATUS_LENGTH_REQUIRED" => Some(Self::SipStatusLengthRequired),
6969            "SIP_STATUS_CONDITIONAL_REQUEST_FAILED" => Some(Self::SipStatusConditionalRequestFailed),
6970            "SIP_STATUS_REQUEST_ENTITY_TOO_LARGE" => Some(Self::SipStatusRequestEntityTooLarge),
6971            "SIP_STATUS_REQUEST_URI_TOO_LONG" => Some(Self::SipStatusRequestUriTooLong),
6972            "SIP_STATUS_UNSUPPORTED_MEDIA_TYPE" => Some(Self::SipStatusUnsupportedMediaType),
6973            "SIP_STATUS_REQUESTED_RANGE_NOT_SATISFIABLE" => Some(Self::SipStatusRequestedRangeNotSatisfiable),
6974            "SIP_STATUS_UNKNOWN_RESOURCE_PRIORITY" => Some(Self::SipStatusUnknownResourcePriority),
6975            "SIP_STATUS_BAD_EXTENSION" => Some(Self::SipStatusBadExtension),
6976            "SIP_STATUS_EXTENSION_REQUIRED" => Some(Self::SipStatusExtensionRequired),
6977            "SIP_STATUS_SESSION_INTERVAL_TOO_SMALL" => Some(Self::SipStatusSessionIntervalTooSmall),
6978            "SIP_STATUS_INTERVAL_TOO_BRIEF" => Some(Self::SipStatusIntervalTooBrief),
6979            "SIP_STATUS_BAD_LOCATION_INFORMATION" => Some(Self::SipStatusBadLocationInformation),
6980            "SIP_STATUS_BAD_ALERT_MESSAGE" => Some(Self::SipStatusBadAlertMessage),
6981            "SIP_STATUS_USE_IDENTITY_HEADER" => Some(Self::SipStatusUseIdentityHeader),
6982            "SIP_STATUS_PROVIDE_REFERRER_IDENTITY" => Some(Self::SipStatusProvideReferrerIdentity),
6983            "SIP_STATUS_FLOW_FAILED" => Some(Self::SipStatusFlowFailed),
6984            "SIP_STATUS_ANONYMITY_DISALLOWED" => Some(Self::SipStatusAnonymityDisallowed),
6985            "SIP_STATUS_BAD_IDENTITY_INFO" => Some(Self::SipStatusBadIdentityInfo),
6986            "SIP_STATUS_UNSUPPORTED_CERTIFICATE" => Some(Self::SipStatusUnsupportedCertificate),
6987            "SIP_STATUS_INVALID_IDENTITY_HEADER" => Some(Self::SipStatusInvalidIdentityHeader),
6988            "SIP_STATUS_FIRST_HOP_LACKS_OUTBOUND_SUPPORT" => Some(Self::SipStatusFirstHopLacksOutboundSupport),
6989            "SIP_STATUS_MAX_BREADTH_EXCEEDED" => Some(Self::SipStatusMaxBreadthExceeded),
6990            "SIP_STATUS_BAD_INFO_PACKAGE" => Some(Self::SipStatusBadInfoPackage),
6991            "SIP_STATUS_CONSENT_NEEDED" => Some(Self::SipStatusConsentNeeded),
6992            "SIP_STATUS_TEMPORARILY_UNAVAILABLE" => Some(Self::SipStatusTemporarilyUnavailable),
6993            "SIP_STATUS_CALL_TRANSACTION_DOES_NOT_EXISTS" => Some(Self::SipStatusCallTransactionDoesNotExists),
6994            "SIP_STATUS_LOOP_DETECTED" => Some(Self::SipStatusLoopDetected),
6995            "SIP_STATUS_TOO_MANY_HOPS" => Some(Self::SipStatusTooManyHops),
6996            "SIP_STATUS_ADDRESS_INCOMPLETE" => Some(Self::SipStatusAddressIncomplete),
6997            "SIP_STATUS_AMBIGUOUS" => Some(Self::SipStatusAmbiguous),
6998            "SIP_STATUS_BUSY_HERE" => Some(Self::SipStatusBusyHere),
6999            "SIP_STATUS_REQUEST_TERMINATED" => Some(Self::SipStatusRequestTerminated),
7000            "SIP_STATUS_NOT_ACCEPTABLE_HERE" => Some(Self::SipStatusNotAcceptableHere),
7001            "SIP_STATUS_BAD_EVENT" => Some(Self::SipStatusBadEvent),
7002            "SIP_STATUS_REQUEST_PENDING" => Some(Self::SipStatusRequestPending),
7003            "SIP_STATUS_UNDECIPHERABLE" => Some(Self::SipStatusUndecipherable),
7004            "SIP_STATUS_SECURITY_AGREEMENT_REQUIRED" => Some(Self::SipStatusSecurityAgreementRequired),
7005            "SIP_STATUS_INTERNAL_SERVER_ERROR" => Some(Self::SipStatusInternalServerError),
7006            "SIP_STATUS_NOT_IMPLEMENTED" => Some(Self::SipStatusNotImplemented),
7007            "SIP_STATUS_BAD_GATEWAY" => Some(Self::SipStatusBadGateway),
7008            "SIP_STATUS_SERVICE_UNAVAILABLE" => Some(Self::SipStatusServiceUnavailable),
7009            "SIP_STATUS_GATEWAY_TIMEOUT" => Some(Self::SipStatusGatewayTimeout),
7010            "SIP_STATUS_VERSION_NOT_SUPPORTED" => Some(Self::SipStatusVersionNotSupported),
7011            "SIP_STATUS_MESSAGE_TOO_LARGE" => Some(Self::SipStatusMessageTooLarge),
7012            "SIP_STATUS_GLOBAL_BUSY_EVERYWHERE" => Some(Self::SipStatusGlobalBusyEverywhere),
7013            "SIP_STATUS_GLOBAL_DECLINE" => Some(Self::SipStatusGlobalDecline),
7014            "SIP_STATUS_GLOBAL_DOES_NOT_EXIST_ANYWHERE" => Some(Self::SipStatusGlobalDoesNotExistAnywhere),
7015            "SIP_STATUS_GLOBAL_NOT_ACCEPTABLE" => Some(Self::SipStatusGlobalNotAcceptable),
7016            "SIP_STATUS_GLOBAL_UNWANTED" => Some(Self::SipStatusGlobalUnwanted),
7017            "SIP_STATUS_GLOBAL_REJECTED" => Some(Self::SipStatusGlobalRejected),
7018            _ => None,
7019        }
7020    }
7021}
7022#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
7023#[repr(i32)]
7024pub enum SipTransport {
7025    Auto = 0,
7026    Udp = 1,
7027    Tcp = 2,
7028    Tls = 3,
7029}
7030impl SipTransport {
7031    /// String value of the enum field names used in the ProtoBuf definition.
7032    ///
7033    /// The values are not transformed in any way and thus are considered stable
7034    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
7035    pub fn as_str_name(&self) -> &'static str {
7036        match self {
7037            Self::Auto => "SIP_TRANSPORT_AUTO",
7038            Self::Udp => "SIP_TRANSPORT_UDP",
7039            Self::Tcp => "SIP_TRANSPORT_TCP",
7040            Self::Tls => "SIP_TRANSPORT_TLS",
7041        }
7042    }
7043    /// Creates an enum from field names used in the ProtoBuf definition.
7044    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
7045        match value {
7046            "SIP_TRANSPORT_AUTO" => Some(Self::Auto),
7047            "SIP_TRANSPORT_UDP" => Some(Self::Udp),
7048            "SIP_TRANSPORT_TCP" => Some(Self::Tcp),
7049            "SIP_TRANSPORT_TLS" => Some(Self::Tls),
7050            _ => None,
7051        }
7052    }
7053}
7054#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
7055#[repr(i32)]
7056pub enum SipHeaderOptions {
7057    /// do not map any headers, except ones mapped explicitly
7058    SipNoHeaders = 0,
7059    /// map all X-* headers to sip.h.x-* attributes
7060    SipXHeaders = 1,
7061    /// map all headers to sip.h.* attributes
7062    SipAllHeaders = 2,
7063}
7064impl SipHeaderOptions {
7065    /// String value of the enum field names used in the ProtoBuf definition.
7066    ///
7067    /// The values are not transformed in any way and thus are considered stable
7068    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
7069    pub fn as_str_name(&self) -> &'static str {
7070        match self {
7071            Self::SipNoHeaders => "SIP_NO_HEADERS",
7072            Self::SipXHeaders => "SIP_X_HEADERS",
7073            Self::SipAllHeaders => "SIP_ALL_HEADERS",
7074        }
7075    }
7076    /// Creates an enum from field names used in the ProtoBuf definition.
7077    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
7078        match value {
7079            "SIP_NO_HEADERS" => Some(Self::SipNoHeaders),
7080            "SIP_X_HEADERS" => Some(Self::SipXHeaders),
7081            "SIP_ALL_HEADERS" => Some(Self::SipAllHeaders),
7082            _ => None,
7083        }
7084    }
7085}
7086#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
7087#[repr(i32)]
7088pub enum SipMediaEncryption {
7089    /// do not enable encryption
7090    SipMediaEncryptDisable = 0,
7091    /// use encryption if available
7092    SipMediaEncryptAllow = 1,
7093    /// require encryption
7094    SipMediaEncryptRequire = 2,
7095}
7096impl SipMediaEncryption {
7097    /// String value of the enum field names used in the ProtoBuf definition.
7098    ///
7099    /// The values are not transformed in any way and thus are considered stable
7100    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
7101    pub fn as_str_name(&self) -> &'static str {
7102        match self {
7103            Self::SipMediaEncryptDisable => "SIP_MEDIA_ENCRYPT_DISABLE",
7104            Self::SipMediaEncryptAllow => "SIP_MEDIA_ENCRYPT_ALLOW",
7105            Self::SipMediaEncryptRequire => "SIP_MEDIA_ENCRYPT_REQUIRE",
7106        }
7107    }
7108    /// Creates an enum from field names used in the ProtoBuf definition.
7109    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
7110        match value {
7111            "SIP_MEDIA_ENCRYPT_DISABLE" => Some(Self::SipMediaEncryptDisable),
7112            "SIP_MEDIA_ENCRYPT_ALLOW" => Some(Self::SipMediaEncryptAllow),
7113            "SIP_MEDIA_ENCRYPT_REQUIRE" => Some(Self::SipMediaEncryptRequire),
7114            _ => None,
7115        }
7116    }
7117}
7118#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
7119#[repr(i32)]
7120pub enum ProviderType {
7121    Unknown = 0,
7122    /// Internally implemented
7123    Internal = 1,
7124    /// Vendor provided
7125    External = 2,
7126}
7127impl ProviderType {
7128    /// String value of the enum field names used in the ProtoBuf definition.
7129    ///
7130    /// The values are not transformed in any way and thus are considered stable
7131    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
7132    pub fn as_str_name(&self) -> &'static str {
7133        match self {
7134            Self::Unknown => "PROVIDER_TYPE_UNKNOWN",
7135            Self::Internal => "PROVIDER_TYPE_INTERNAL",
7136            Self::External => "PROVIDER_TYPE_EXTERNAL",
7137        }
7138    }
7139    /// Creates an enum from field names used in the ProtoBuf definition.
7140    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
7141        match value {
7142            "PROVIDER_TYPE_UNKNOWN" => Some(Self::Unknown),
7143            "PROVIDER_TYPE_INTERNAL" => Some(Self::Internal),
7144            "PROVIDER_TYPE_EXTERNAL" => Some(Self::External),
7145            _ => None,
7146        }
7147    }
7148}
7149#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
7150#[repr(i32)]
7151pub enum SipCallStatus {
7152    /// Incoming call is being handled by the SIP service. The SIP participant hasn't joined a LiveKit room yet
7153    ScsCallIncoming = 0,
7154    /// SIP participant for outgoing call has been created. The SIP outgoing call is being established
7155    ScsParticipantJoined = 1,
7156    /// Call is ongoing. SIP participant is active in the LiveKit room
7157    ScsActive = 2,
7158    /// Call has ended
7159    ScsDisconnected = 3,
7160    /// Call has ended or never succeeded because of an error
7161    ScsError = 4,
7162}
7163impl SipCallStatus {
7164    /// String value of the enum field names used in the ProtoBuf definition.
7165    ///
7166    /// The values are not transformed in any way and thus are considered stable
7167    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
7168    pub fn as_str_name(&self) -> &'static str {
7169        match self {
7170            Self::ScsCallIncoming => "SCS_CALL_INCOMING",
7171            Self::ScsParticipantJoined => "SCS_PARTICIPANT_JOINED",
7172            Self::ScsActive => "SCS_ACTIVE",
7173            Self::ScsDisconnected => "SCS_DISCONNECTED",
7174            Self::ScsError => "SCS_ERROR",
7175        }
7176    }
7177    /// Creates an enum from field names used in the ProtoBuf definition.
7178    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
7179        match value {
7180            "SCS_CALL_INCOMING" => Some(Self::ScsCallIncoming),
7181            "SCS_PARTICIPANT_JOINED" => Some(Self::ScsParticipantJoined),
7182            "SCS_ACTIVE" => Some(Self::ScsActive),
7183            "SCS_DISCONNECTED" => Some(Self::ScsDisconnected),
7184            "SCS_ERROR" => Some(Self::ScsError),
7185            _ => None,
7186        }
7187    }
7188}
7189#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
7190#[repr(i32)]
7191pub enum SipTransferStatus {
7192    StsTransferOngoing = 0,
7193    StsTransferFailed = 1,
7194    StsTransferSuccessful = 2,
7195}
7196impl SipTransferStatus {
7197    /// String value of the enum field names used in the ProtoBuf definition.
7198    ///
7199    /// The values are not transformed in any way and thus are considered stable
7200    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
7201    pub fn as_str_name(&self) -> &'static str {
7202        match self {
7203            Self::StsTransferOngoing => "STS_TRANSFER_ONGOING",
7204            Self::StsTransferFailed => "STS_TRANSFER_FAILED",
7205            Self::StsTransferSuccessful => "STS_TRANSFER_SUCCESSFUL",
7206        }
7207    }
7208    /// Creates an enum from field names used in the ProtoBuf definition.
7209    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
7210        match value {
7211            "STS_TRANSFER_ONGOING" => Some(Self::StsTransferOngoing),
7212            "STS_TRANSFER_FAILED" => Some(Self::StsTransferFailed),
7213            "STS_TRANSFER_SUCCESSFUL" => Some(Self::StsTransferSuccessful),
7214            _ => None,
7215        }
7216    }
7217}
7218#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
7219#[repr(i32)]
7220pub enum SipFeature {
7221    None = 0,
7222    KrispEnabled = 1,
7223}
7224impl SipFeature {
7225    /// String value of the enum field names used in the ProtoBuf definition.
7226    ///
7227    /// The values are not transformed in any way and thus are considered stable
7228    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
7229    pub fn as_str_name(&self) -> &'static str {
7230        match self {
7231            Self::None => "NONE",
7232            Self::KrispEnabled => "KRISP_ENABLED",
7233        }
7234    }
7235    /// Creates an enum from field names used in the ProtoBuf definition.
7236    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
7237        match value {
7238            "NONE" => Some(Self::None),
7239            "KRISP_ENABLED" => Some(Self::KrispEnabled),
7240            _ => None,
7241        }
7242    }
7243}
7244#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
7245#[repr(i32)]
7246pub enum SipCallDirection {
7247    ScdUnknown = 0,
7248    ScdInbound = 1,
7249    ScdOutbound = 2,
7250}
7251impl SipCallDirection {
7252    /// String value of the enum field names used in the ProtoBuf definition.
7253    ///
7254    /// The values are not transformed in any way and thus are considered stable
7255    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
7256    pub fn as_str_name(&self) -> &'static str {
7257        match self {
7258            Self::ScdUnknown => "SCD_UNKNOWN",
7259            Self::ScdInbound => "SCD_INBOUND",
7260            Self::ScdOutbound => "SCD_OUTBOUND",
7261        }
7262    }
7263    /// Creates an enum from field names used in the ProtoBuf definition.
7264    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
7265        match value {
7266            "SCD_UNKNOWN" => Some(Self::ScdUnknown),
7267            "SCD_INBOUND" => Some(Self::ScdInbound),
7268            "SCD_OUTBOUND" => Some(Self::ScdOutbound),
7269            _ => None,
7270        }
7271    }
7272}
7273#[derive(Clone, PartialEq, ::prost::Message)]
7274pub struct DialWhatsAppCallRequest {
7275    /// Required - The phone number id of the business that is initiating the call
7276    #[prost(string, tag = "1")]
7277    pub whatsapp_phone_number_id: ::prost::alloc::string::String,
7278    /// Required - The number of the user that is supossed to receive the call
7279    #[prost(string, tag = "2")]
7280    pub whatsapp_to_phone_number: ::prost::alloc::string::String,
7281    /// Required - The API key of the business that is initiating the call
7282    #[prost(string, tag = "3")]
7283    pub whatsapp_api_key: ::prost::alloc::string::String,
7284    /// Required - WhatsApp Cloud API version, eg: 23.0, 24.0, etc.
7285    #[prost(string, tag = "12")]
7286    pub whatsapp_cloud_api_version: ::prost::alloc::string::String,
7287    /// Optional - An arbitrary string you can pass in that is useful for tracking and logging purposes.
7288    #[prost(string, tag = "4")]
7289    pub whatsapp_biz_opaque_callback_data: ::prost::alloc::string::String,
7290    /// Optional - What LiveKit room should this participant be connected too
7291    #[prost(string, tag = "5")]
7292    pub room_name: ::prost::alloc::string::String,
7293    /// Optional - Agents to dispatch the call to
7294    #[prost(message, repeated, tag = "6")]
7295    pub agents: ::prost::alloc::vec::Vec<RoomAgentDispatch>,
7296    /// Optional - Identity of the participant in LiveKit room
7297    /// This is used for logging purposes, so it is advised to not put PII in this field.
7298    #[prost(string, tag = "7")]
7299    pub participant_identity: ::prost::alloc::string::String,
7300    /// Optional - Name of the participant in LiveKit room
7301    #[prost(string, tag = "8")]
7302    pub participant_name: ::prost::alloc::string::String,
7303    /// Optional - User-defined metadata. Will be attached to a created Participant in the room.
7304    #[prost(string, tag = "9")]
7305    pub participant_metadata: ::prost::alloc::string::String,
7306    /// Optional - User-defined attributes. Will be attached to a created Participant in the room.
7307    #[prost(map = "string, string", tag = "10")]
7308    pub participant_attributes: ::std::collections::HashMap<::prost::alloc::string::String, ::prost::alloc::string::String>,
7309    /// Optional - Country where the call terminates as ISO 3166-1 alpha-2 (<https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2>). This will be used by the livekit infrastructure to route calls.
7310    #[prost(string, tag = "11")]
7311    pub destination_country: ::prost::alloc::string::String,
7312    /// Max time for the callee to answer the call.
7313    #[prost(message, optional, tag = "13")]
7314    pub ringing_timeout: ::core::option::Option<::pbjson_types::Duration>,
7315}
7316#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
7317pub struct DialWhatsAppCallResponse {
7318    /// Call ID sent by Meta
7319    #[prost(string, tag = "1")]
7320    pub whatsapp_call_id: ::prost::alloc::string::String,
7321    /// The name of the LiveKit room that the call is connected to
7322    #[prost(string, tag = "2")]
7323    pub room_name: ::prost::alloc::string::String,
7324}
7325#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
7326pub struct DisconnectWhatsAppCallRequest {
7327    /// Required - Call ID sent by Meta
7328    #[prost(string, tag = "1")]
7329    pub whatsapp_call_id: ::prost::alloc::string::String,
7330    /// The API key of the whatsapp business.
7331    /// Required if the DisconnectReason is BUSINESS_INITIATED.
7332    /// Optional for  USER_INITIATED as no API call to WhatsApp is needed.
7333    #[prost(string, tag = "2")]
7334    pub whatsapp_api_key: ::prost::alloc::string::String,
7335    /// The reason for disconnecting the call
7336    #[prost(enumeration = "disconnect_whats_app_call_request::DisconnectReason", tag = "3")]
7337    pub disconnect_reason: i32,
7338}
7339/// Nested message and enum types in `DisconnectWhatsAppCallRequest`.
7340pub mod disconnect_whats_app_call_request {
7341    #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
7342    #[repr(i32)]
7343    pub enum DisconnectReason {
7344        /// The call is being disconnected by the business
7345        BusinessInitiated = 0,
7346        /// The call is disconnected by the user.
7347        /// This can be tracked as part of call terminate webhook
7348        /// <https://developers.facebook.com/documentation/business-messaging/whatsapp/calling/user-initiated-calls#call-terminate-webhook>
7349        /// Note that this webhook will also be sent when the call is disconnected by the business.
7350        /// Calling the API twice in such cases will result in an error.
7351        UserInitiated = 1,
7352    }
7353    impl DisconnectReason {
7354        /// String value of the enum field names used in the ProtoBuf definition.
7355        ///
7356        /// The values are not transformed in any way and thus are considered stable
7357        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
7358        pub fn as_str_name(&self) -> &'static str {
7359            match self {
7360                Self::BusinessInitiated => "BUSINESS_INITIATED",
7361                Self::UserInitiated => "USER_INITIATED",
7362            }
7363        }
7364        /// Creates an enum from field names used in the ProtoBuf definition.
7365        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
7366            match value {
7367                "BUSINESS_INITIATED" => Some(Self::BusinessInitiated),
7368                "USER_INITIATED" => Some(Self::UserInitiated),
7369                _ => None,
7370            }
7371        }
7372    }
7373}
7374#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
7375pub struct DisconnectWhatsAppCallResponse {
7376}
7377#[derive(Clone, PartialEq, ::prost::Message)]
7378pub struct ConnectWhatsAppCallRequest {
7379    /// Required - Call ID sent by Meta
7380    #[prost(string, tag = "1")]
7381    pub whatsapp_call_id: ::prost::alloc::string::String,
7382    /// Required - The call connect webhook comes with SDP from Meta
7383    /// It is the answer SDP for a business initiated call
7384    #[prost(message, optional, tag = "2")]
7385    pub sdp: ::core::option::Option<SessionDescription>,
7386    /// Wait for the answer for the call before returning.
7387    #[prost(bool, tag = "3")]
7388    pub wait_until_answered: bool,
7389}
7390#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
7391pub struct ConnectWhatsAppCallResponse {
7392}
7393#[derive(Clone, PartialEq, ::prost::Message)]
7394pub struct AcceptWhatsAppCallRequest {
7395    /// Required - The phone number id of the business that is conencting the call
7396    #[prost(string, tag = "1")]
7397    pub whatsapp_phone_number_id: ::prost::alloc::string::String,
7398    /// Required - The API key of the business that is connecting the call
7399    #[prost(string, tag = "2")]
7400    pub whatsapp_api_key: ::prost::alloc::string::String,
7401    /// Required - WhatsApp Cloud API version, eg: 23.0, 24.0, etc.
7402    #[prost(string, tag = "13")]
7403    pub whatsapp_cloud_api_version: ::prost::alloc::string::String,
7404    /// Required - Call ID sent by Meta
7405    #[prost(string, tag = "3")]
7406    pub whatsapp_call_id: ::prost::alloc::string::String,
7407    /// Optional - An arbitrary string you can pass in that is useful for tracking and logging purposes.
7408    #[prost(string, tag = "4")]
7409    pub whatsapp_biz_opaque_callback_data: ::prost::alloc::string::String,
7410    /// Required - The call accept webhook comes with SDP from Meta
7411    /// It is the for a user initiated call
7412    #[prost(message, optional, tag = "5")]
7413    pub sdp: ::core::option::Option<SessionDescription>,
7414    /// Optional - What LiveKit room should this participant be connected too
7415    #[prost(string, tag = "6")]
7416    pub room_name: ::prost::alloc::string::String,
7417    /// Optional - Agents to dispatch the call to
7418    #[prost(message, repeated, tag = "7")]
7419    pub agents: ::prost::alloc::vec::Vec<RoomAgentDispatch>,
7420    /// Optional - Identity of the participant in LiveKit room
7421    /// This is used for logging purposes, so it is advised to not put PII in this field.
7422    #[prost(string, tag = "8")]
7423    pub participant_identity: ::prost::alloc::string::String,
7424    /// Optional - Name of the participant in LiveKit room
7425    #[prost(string, tag = "9")]
7426    pub participant_name: ::prost::alloc::string::String,
7427    /// Optional - User-defined metadata. Will be attached to a created Participant in the room.
7428    #[prost(string, tag = "10")]
7429    pub participant_metadata: ::prost::alloc::string::String,
7430    /// Optional - User-defined attributes. Will be attached to a created Participant in the room.
7431    #[prost(map = "string, string", tag = "11")]
7432    pub participant_attributes: ::std::collections::HashMap<::prost::alloc::string::String, ::prost::alloc::string::String>,
7433    /// Optional - Country where the call terminates as ISO 3166-1 alpha-2 (<https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2>). This will be used by the livekit infrastructure to route calls.
7434    #[prost(string, tag = "12")]
7435    pub destination_country: ::prost::alloc::string::String,
7436    /// Max time for the callee to answer the call.
7437    #[prost(message, optional, tag = "14")]
7438    pub ringing_timeout: ::core::option::Option<::pbjson_types::Duration>,
7439    /// Wait for the answer for the call before returning.
7440    #[prost(bool, tag = "15")]
7441    pub wait_until_answered: bool,
7442}
7443#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
7444pub struct AcceptWhatsAppCallResponse {
7445    /// The name of the LiveKit room that the call is connected to
7446    #[prost(string, tag = "1")]
7447    pub room_name: ::prost::alloc::string::String,
7448}
7449#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
7450pub struct WhatsAppCall {
7451    /// list of call ids that are currently active
7452    #[prost(string, tag = "1")]
7453    pub whatsapp_call_id: ::prost::alloc::string::String,
7454    /// Direction of the call
7455    #[prost(enumeration = "WhatsAppCallDirection", tag = "2")]
7456    pub direction: i32,
7457}
7458#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
7459#[repr(i32)]
7460pub enum WhatsAppCallDirection {
7461    WhatsappCallDirectionInbound = 0,
7462    WhatsappCallDirectionOutbound = 2,
7463}
7464impl WhatsAppCallDirection {
7465    /// String value of the enum field names used in the ProtoBuf definition.
7466    ///
7467    /// The values are not transformed in any way and thus are considered stable
7468    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
7469    pub fn as_str_name(&self) -> &'static str {
7470        match self {
7471            Self::WhatsappCallDirectionInbound => "WHATSAPP_CALL_DIRECTION_INBOUND",
7472            Self::WhatsappCallDirectionOutbound => "WHATSAPP_CALL_DIRECTION_OUTBOUND",
7473        }
7474    }
7475    /// Creates an enum from field names used in the ProtoBuf definition.
7476    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
7477        match value {
7478            "WHATSAPP_CALL_DIRECTION_INBOUND" => Some(Self::WhatsappCallDirectionInbound),
7479            "WHATSAPP_CALL_DIRECTION_OUTBOUND" => Some(Self::WhatsappCallDirectionOutbound),
7480            _ => None,
7481        }
7482    }
7483}
7484#[derive(Clone, PartialEq, ::prost::Message)]
7485pub struct ConnectTwilioCallRequest {
7486    /// The Direction of the call
7487    #[prost(enumeration = "connect_twilio_call_request::TwilioCallDirection", tag = "1")]
7488    pub twilio_call_direction: i32,
7489    /// What LiveKit room should this call be connected to
7490    #[prost(string, tag = "2")]
7491    pub room_name: ::prost::alloc::string::String,
7492    /// Optional agents to dispatch the call to
7493    #[prost(message, repeated, tag = "3")]
7494    pub agents: ::prost::alloc::vec::Vec<RoomAgentDispatch>,
7495    /// Optional identity of the participant in LiveKit room
7496    /// This is used for logging purposes, so it is advised to not put PII in this field.
7497    #[prost(string, tag = "4")]
7498    pub participant_identity: ::prost::alloc::string::String,
7499    /// Optional name of the participant in LiveKit room
7500    #[prost(string, tag = "5")]
7501    pub participant_name: ::prost::alloc::string::String,
7502    /// Optional user-defined metadata. Will be attached to a created Participant in the room.
7503    #[prost(string, tag = "6")]
7504    pub participant_metadata: ::prost::alloc::string::String,
7505    /// Optional user-defined attributes. Will be attached to a created Participant in the room.
7506    #[prost(map = "string, string", tag = "7")]
7507    pub participant_attributes: ::std::collections::HashMap<::prost::alloc::string::String, ::prost::alloc::string::String>,
7508    /// Country where the call terminates as ISO 3166-1 alpha-2 (<https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2>). This will be used by the livekit infrastructure to route calls.
7509    #[prost(string, tag = "8")]
7510    pub destination_country: ::prost::alloc::string::String,
7511}
7512/// Nested message and enum types in `ConnectTwilioCallRequest`.
7513pub mod connect_twilio_call_request {
7514    #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
7515    #[repr(i32)]
7516    pub enum TwilioCallDirection {
7517        /// Call is inbound to LiveKit from Twilio
7518        Inbound = 0,
7519        /// Call is outbound from LiveKit to Twilio
7520        Outbound = 1,
7521    }
7522    impl TwilioCallDirection {
7523        /// String value of the enum field names used in the ProtoBuf definition.
7524        ///
7525        /// The values are not transformed in any way and thus are considered stable
7526        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
7527        pub fn as_str_name(&self) -> &'static str {
7528            match self {
7529                Self::Inbound => "TWILIO_CALL_DIRECTION_INBOUND",
7530                Self::Outbound => "TWILIO_CALL_DIRECTION_OUTBOUND",
7531            }
7532        }
7533        /// Creates an enum from field names used in the ProtoBuf definition.
7534        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
7535            match value {
7536                "TWILIO_CALL_DIRECTION_INBOUND" => Some(Self::Inbound),
7537                "TWILIO_CALL_DIRECTION_OUTBOUND" => Some(Self::Outbound),
7538                _ => None,
7539            }
7540        }
7541    }
7542}
7543#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
7544pub struct ConnectTwilioCallResponse {
7545    /// The websocket URL which twilio media stream will connect to
7546    #[prost(string, tag = "1")]
7547    pub connect_url: ::prost::alloc::string::String,
7548}
7549#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
7550#[repr(i32)]
7551pub enum ConnectorType {
7552    Unspecified = 0,
7553    WhatsApp = 1,
7554    Twilio = 2,
7555}
7556impl ConnectorType {
7557    /// String value of the enum field names used in the ProtoBuf definition.
7558    ///
7559    /// The values are not transformed in any way and thus are considered stable
7560    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
7561    pub fn as_str_name(&self) -> &'static str {
7562        match self {
7563            Self::Unspecified => "Unspecified",
7564            Self::WhatsApp => "WhatsApp",
7565            Self::Twilio => "Twilio",
7566        }
7567    }
7568    /// Creates an enum from field names used in the ProtoBuf definition.
7569    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
7570        match value {
7571            "Unspecified" => Some(Self::Unspecified),
7572            "WhatsApp" => Some(Self::WhatsApp),
7573            "Twilio" => Some(Self::Twilio),
7574            _ => None,
7575        }
7576    }
7577}
7578#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
7579pub struct AnalyticsVideoLayer {
7580    #[prost(int32, tag = "1")]
7581    pub layer: i32,
7582    #[prost(uint32, tag = "2")]
7583    pub packets: u32,
7584    #[prost(uint64, tag = "3")]
7585    pub bytes: u64,
7586    #[prost(uint32, tag = "4")]
7587    pub frames: u32,
7588}
7589#[derive(Clone, PartialEq, ::prost::Message)]
7590pub struct AnalyticsStream {
7591    #[prost(uint32, tag = "1")]
7592    pub ssrc: u32,
7593    #[prost(uint32, tag = "2")]
7594    pub primary_packets: u32,
7595    #[prost(uint64, tag = "3")]
7596    pub primary_bytes: u64,
7597    #[prost(uint32, tag = "4")]
7598    pub retransmit_packets: u32,
7599    #[prost(uint64, tag = "5")]
7600    pub retransmit_bytes: u64,
7601    #[prost(uint32, tag = "6")]
7602    pub padding_packets: u32,
7603    #[prost(uint64, tag = "7")]
7604    pub padding_bytes: u64,
7605    #[prost(uint32, tag = "8")]
7606    pub packets_lost: u32,
7607    #[prost(uint32, tag = "9")]
7608    pub frames: u32,
7609    #[prost(uint32, tag = "10")]
7610    pub rtt: u32,
7611    #[prost(uint32, tag = "11")]
7612    pub jitter: u32,
7613    #[prost(uint32, tag = "12")]
7614    pub nacks: u32,
7615    #[prost(uint32, tag = "13")]
7616    pub plis: u32,
7617    #[prost(uint32, tag = "14")]
7618    pub firs: u32,
7619    #[prost(message, repeated, tag = "15")]
7620    pub video_layers: ::prost::alloc::vec::Vec<AnalyticsVideoLayer>,
7621    #[prost(message, optional, tag = "17")]
7622    pub start_time: ::core::option::Option<::pbjson_types::Timestamp>,
7623    #[prost(message, optional, tag = "18")]
7624    pub end_time: ::core::option::Option<::pbjson_types::Timestamp>,
7625    #[prost(uint32, tag = "19")]
7626    pub packets_out_of_order: u32,
7627}
7628#[derive(Clone, PartialEq, ::prost::Message)]
7629pub struct AnalyticsStat {
7630    /// unique id for this stat
7631    #[prost(string, tag = "14")]
7632    pub id: ::prost::alloc::string::String,
7633    #[prost(string, tag = "1")]
7634    pub analytics_key: ::prost::alloc::string::String,
7635    #[prost(enumeration = "StreamType", tag = "2")]
7636    pub kind: i32,
7637    #[prost(message, optional, tag = "3")]
7638    pub time_stamp: ::core::option::Option<::pbjson_types::Timestamp>,
7639    #[prost(string, tag = "4")]
7640    pub node: ::prost::alloc::string::String,
7641    #[prost(string, tag = "5")]
7642    pub room_id: ::prost::alloc::string::String,
7643    #[prost(string, tag = "6")]
7644    pub room_name: ::prost::alloc::string::String,
7645    #[prost(string, tag = "7")]
7646    pub participant_id: ::prost::alloc::string::String,
7647    #[prost(string, tag = "8")]
7648    pub track_id: ::prost::alloc::string::String,
7649    /// average score
7650    #[prost(float, tag = "9")]
7651    pub score: f32,
7652    #[prost(message, repeated, tag = "10")]
7653    pub streams: ::prost::alloc::vec::Vec<AnalyticsStream>,
7654    #[prost(string, tag = "11")]
7655    pub mime: ::prost::alloc::string::String,
7656    #[prost(float, tag = "12")]
7657    pub min_score: f32,
7658    #[prost(float, tag = "13")]
7659    pub median_score: f32,
7660}
7661#[derive(Clone, PartialEq, ::prost::Message)]
7662pub struct AnalyticsStats {
7663    #[prost(message, repeated, tag = "1")]
7664    pub stats: ::prost::alloc::vec::Vec<AnalyticsStat>,
7665}
7666#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
7667pub struct AnalyticsClientMeta {
7668    #[prost(string, tag = "1")]
7669    pub region: ::prost::alloc::string::String,
7670    #[prost(string, tag = "2")]
7671    pub node: ::prost::alloc::string::String,
7672    #[prost(string, tag = "3")]
7673    pub client_addr: ::prost::alloc::string::String,
7674    #[prost(uint32, tag = "4")]
7675    pub client_connect_time: u32,
7676    /// udp, tcp, turn
7677    #[prost(string, tag = "5")]
7678    pub connection_type: ::prost::alloc::string::String,
7679    #[prost(enumeration = "ReconnectReason", tag = "6")]
7680    pub reconnect_reason: i32,
7681    #[prost(string, optional, tag = "7")]
7682    pub geo_hash: ::core::option::Option<::prost::alloc::string::String>,
7683    #[prost(string, optional, tag = "8")]
7684    pub country: ::core::option::Option<::prost::alloc::string::String>,
7685    #[prost(uint32, optional, tag = "9")]
7686    pub isp_asn: ::core::option::Option<u32>,
7687}
7688#[derive(Clone, PartialEq, ::prost::Message)]
7689pub struct AnalyticsEvent {
7690    /// unique id for this event
7691    #[prost(string, tag = "25")]
7692    pub id: ::prost::alloc::string::String,
7693    #[prost(enumeration = "AnalyticsEventType", tag = "1")]
7694    pub r#type: i32,
7695    #[prost(message, optional, tag = "2")]
7696    pub timestamp: ::core::option::Option<::pbjson_types::Timestamp>,
7697    #[prost(string, tag = "3")]
7698    pub room_id: ::prost::alloc::string::String,
7699    #[prost(message, optional, tag = "4")]
7700    pub room: ::core::option::Option<Room>,
7701    #[prost(string, tag = "5")]
7702    pub participant_id: ::prost::alloc::string::String,
7703    #[prost(message, optional, tag = "6")]
7704    pub participant: ::core::option::Option<ParticipantInfo>,
7705    #[prost(string, tag = "7")]
7706    pub track_id: ::prost::alloc::string::String,
7707    #[prost(message, optional, tag = "8")]
7708    pub track: ::core::option::Option<TrackInfo>,
7709    #[prost(string, tag = "10")]
7710    pub analytics_key: ::prost::alloc::string::String,
7711    #[prost(message, optional, tag = "11")]
7712    pub client_info: ::core::option::Option<ClientInfo>,
7713    #[prost(message, optional, tag = "12")]
7714    pub client_meta: ::core::option::Option<AnalyticsClientMeta>,
7715    #[prost(string, tag = "13")]
7716    pub egress_id: ::prost::alloc::string::String,
7717    #[prost(string, tag = "19")]
7718    pub ingress_id: ::prost::alloc::string::String,
7719    #[prost(enumeration = "VideoQuality", tag = "14")]
7720    pub max_subscribed_video_quality: i32,
7721    #[prost(message, optional, tag = "15")]
7722    pub publisher: ::core::option::Option<ParticipantInfo>,
7723    #[prost(string, tag = "16")]
7724    pub mime: ::prost::alloc::string::String,
7725    #[prost(message, optional, tag = "17")]
7726    pub egress: ::core::option::Option<EgressInfo>,
7727    #[prost(message, optional, tag = "18")]
7728    pub ingress: ::core::option::Option<IngressInfo>,
7729    #[prost(string, tag = "20")]
7730    pub error: ::prost::alloc::string::String,
7731    #[prost(message, optional, tag = "21")]
7732    pub rtp_stats: ::core::option::Option<RtpStats>,
7733    #[prost(int32, tag = "22")]
7734    pub video_layer: i32,
7735    #[prost(string, tag = "24")]
7736    pub node_id: ::prost::alloc::string::String,
7737    #[prost(string, tag = "26")]
7738    pub sip_call_id: ::prost::alloc::string::String,
7739    #[prost(message, optional, tag = "27")]
7740    pub sip_call: ::core::option::Option<SipCallInfo>,
7741    #[prost(string, tag = "28")]
7742    pub sip_trunk_id: ::prost::alloc::string::String,
7743    #[prost(message, optional, tag = "29")]
7744    pub sip_inbound_trunk: ::core::option::Option<SipInboundTrunkInfo>,
7745    #[prost(message, optional, tag = "30")]
7746    pub sip_outbound_trunk: ::core::option::Option<SipOutboundTrunkInfo>,
7747    #[prost(string, tag = "31")]
7748    pub sip_dispatch_rule_id: ::prost::alloc::string::String,
7749    #[prost(message, optional, tag = "32")]
7750    pub sip_dispatch_rule: ::core::option::Option<SipDispatchRuleInfo>,
7751    #[prost(message, optional, tag = "36")]
7752    pub sip_transfer: ::core::option::Option<SipTransferInfo>,
7753    #[prost(message, optional, tag = "33")]
7754    pub report: ::core::option::Option<ReportInfo>,
7755    #[prost(message, optional, tag = "34")]
7756    pub api_call: ::core::option::Option<ApiCallInfo>,
7757    #[prost(message, optional, tag = "35")]
7758    pub webhook: ::core::option::Option<WebhookInfo>,
7759}
7760#[derive(Clone, PartialEq, ::prost::Message)]
7761pub struct AnalyticsEvents {
7762    #[prost(message, repeated, tag = "1")]
7763    pub events: ::prost::alloc::vec::Vec<AnalyticsEvent>,
7764}
7765#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
7766pub struct AnalyticsRoomParticipant {
7767    #[prost(string, tag = "1")]
7768    pub id: ::prost::alloc::string::String,
7769    #[prost(string, tag = "2")]
7770    pub identity: ::prost::alloc::string::String,
7771    #[prost(string, tag = "3")]
7772    pub name: ::prost::alloc::string::String,
7773    #[prost(enumeration = "participant_info::State", tag = "4")]
7774    pub state: i32,
7775    #[prost(message, optional, tag = "5")]
7776    pub joined_at: ::core::option::Option<::pbjson_types::Timestamp>,
7777}
7778#[derive(Clone, PartialEq, ::prost::Message)]
7779pub struct AnalyticsRoom {
7780    #[prost(string, tag = "1")]
7781    pub id: ::prost::alloc::string::String,
7782    #[prost(string, tag = "2")]
7783    pub name: ::prost::alloc::string::String,
7784    #[prost(string, tag = "5")]
7785    pub project_id: ::prost::alloc::string::String,
7786    #[prost(message, optional, tag = "3")]
7787    pub created_at: ::core::option::Option<::pbjson_types::Timestamp>,
7788    #[prost(message, repeated, tag = "4")]
7789    pub participants: ::prost::alloc::vec::Vec<AnalyticsRoomParticipant>,
7790}
7791#[derive(Clone, PartialEq, ::prost::Message)]
7792pub struct AnalyticsNodeRooms {
7793    #[prost(string, tag = "1")]
7794    pub node_id: ::prost::alloc::string::String,
7795    #[prost(uint64, tag = "2")]
7796    pub sequence_number: u64,
7797    #[prost(message, optional, tag = "3")]
7798    pub timestamp: ::core::option::Option<::pbjson_types::Timestamp>,
7799    #[prost(message, repeated, tag = "4")]
7800    pub rooms: ::prost::alloc::vec::Vec<AnalyticsRoom>,
7801}
7802#[derive(Clone, PartialEq, ::prost::Message)]
7803pub struct ReportInfo {
7804    #[prost(oneof = "report_info::Message", tags = "1")]
7805    pub message: ::core::option::Option<report_info::Message>,
7806}
7807/// Nested message and enum types in `ReportInfo`.
7808pub mod report_info {
7809    #[derive(Clone, PartialEq, ::prost::Oneof)]
7810    pub enum Message {
7811        #[prost(message, tag = "1")]
7812        FeatureUsage(super::FeatureUsageInfo),
7813    }
7814}
7815#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
7816pub struct TimeRange {
7817    #[prost(message, optional, tag = "1")]
7818    pub started_at: ::core::option::Option<::pbjson_types::Timestamp>,
7819    #[prost(message, optional, tag = "2")]
7820    pub ended_at: ::core::option::Option<::pbjson_types::Timestamp>,
7821}
7822#[derive(Clone, PartialEq, ::prost::Message)]
7823pub struct FeatureUsageInfo {
7824    #[prost(enumeration = "feature_usage_info::Feature", tag = "1")]
7825    pub feature: i32,
7826    #[prost(string, tag = "2")]
7827    pub project_id: ::prost::alloc::string::String,
7828    #[prost(string, tag = "3")]
7829    pub room_name: ::prost::alloc::string::String,
7830    #[prost(string, tag = "4")]
7831    pub room_id: ::prost::alloc::string::String,
7832    #[prost(string, tag = "5")]
7833    pub participant_identity: ::prost::alloc::string::String,
7834    #[prost(string, tag = "6")]
7835    pub participant_id: ::prost::alloc::string::String,
7836    #[prost(string, tag = "7")]
7837    pub track_id: ::prost::alloc::string::String,
7838    /// time ranges during which the feature was enabled.
7839    /// for e. g., noise cancellation may not be applied when a media track is paused/muted,
7840    /// this allows reporting only periods during which a feature is active.
7841    #[prost(message, repeated, tag = "8")]
7842    pub time_ranges: ::prost::alloc::vec::Vec<TimeRange>,
7843    /// Feature specific metadata included in the report
7844    #[prost(map = "string, string", tag = "9")]
7845    pub feature_info: ::std::collections::HashMap<::prost::alloc::string::String, ::prost::alloc::string::String>,
7846}
7847/// Nested message and enum types in `FeatureUsageInfo`.
7848pub mod feature_usage_info {
7849    #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
7850    #[repr(i32)]
7851    pub enum Feature {
7852        KrispNoiseCancellation = 0,
7853        KrispBackgroundVoiceCancellation = 1,
7854        AicAudioEnhancement = 2,
7855        KrispViva = 3,
7856    }
7857    impl Feature {
7858        /// String value of the enum field names used in the ProtoBuf definition.
7859        ///
7860        /// The values are not transformed in any way and thus are considered stable
7861        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
7862        pub fn as_str_name(&self) -> &'static str {
7863            match self {
7864                Self::KrispNoiseCancellation => "KRISP_NOISE_CANCELLATION",
7865                Self::KrispBackgroundVoiceCancellation => "KRISP_BACKGROUND_VOICE_CANCELLATION",
7866                Self::AicAudioEnhancement => "AIC_AUDIO_ENHANCEMENT",
7867                Self::KrispViva => "KRISP_VIVA",
7868            }
7869        }
7870        /// Creates an enum from field names used in the ProtoBuf definition.
7871        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
7872            match value {
7873                "KRISP_NOISE_CANCELLATION" => Some(Self::KrispNoiseCancellation),
7874                "KRISP_BACKGROUND_VOICE_CANCELLATION" => Some(Self::KrispBackgroundVoiceCancellation),
7875                "AIC_AUDIO_ENHANCEMENT" => Some(Self::AicAudioEnhancement),
7876                "KRISP_VIVA" => Some(Self::KrispViva),
7877                _ => None,
7878            }
7879        }
7880    }
7881}
7882#[derive(Clone, PartialEq, ::prost::Message)]
7883pub struct ApiCallRequest {
7884    #[prost(oneof = "api_call_request::Message", tags = "1, 2, 3, 4, 5, 6, 7, 8, 9, 10")]
7885    pub message: ::core::option::Option<api_call_request::Message>,
7886}
7887/// Nested message and enum types in `APICallRequest`.
7888pub mod api_call_request {
7889    #[derive(Clone, PartialEq, ::prost::Oneof)]
7890    pub enum Message {
7891        #[prost(message, tag = "1")]
7892        CreateRoomRequest(super::CreateRoomRequest),
7893        #[prost(message, tag = "2")]
7894        ListRoomsRequest(super::ListRoomsRequest),
7895        #[prost(message, tag = "3")]
7896        DeleteRoomRequest(super::DeleteRoomRequest),
7897        #[prost(message, tag = "4")]
7898        ListParticipantsRequest(super::ListParticipantsRequest),
7899        #[prost(message, tag = "5")]
7900        RoomParticipantIdentity(super::RoomParticipantIdentity),
7901        #[prost(message, tag = "6")]
7902        MuteRoomTrackRequest(super::MuteRoomTrackRequest),
7903        #[prost(message, tag = "7")]
7904        UpdateParticipantRequest(super::UpdateParticipantRequest),
7905        #[prost(message, tag = "8")]
7906        UpdateSubscriptionsRequest(super::UpdateSubscriptionsRequest),
7907        #[prost(message, tag = "9")]
7908        SendDataRequest(super::SendDataRequest),
7909        #[prost(message, tag = "10")]
7910        UpdateRoomMetadataRequest(super::UpdateRoomMetadataRequest),
7911    }
7912}
7913#[derive(Clone, PartialEq, ::prost::Message)]
7914pub struct ApiCallInfo {
7915    #[prost(string, tag = "1")]
7916    pub project_id: ::prost::alloc::string::String,
7917    #[prost(message, optional, tag = "2")]
7918    pub request: ::core::option::Option<ApiCallRequest>,
7919    #[prost(string, tag = "3")]
7920    pub service: ::prost::alloc::string::String,
7921    #[prost(string, tag = "4")]
7922    pub method: ::prost::alloc::string::String,
7923    #[prost(string, tag = "5")]
7924    pub node_id: ::prost::alloc::string::String,
7925    #[prost(int32, tag = "6")]
7926    pub status: i32,
7927    #[prost(string, tag = "7")]
7928    pub twirp_error_code: ::prost::alloc::string::String,
7929    #[prost(string, tag = "8")]
7930    pub twirp_error_message: ::prost::alloc::string::String,
7931    #[prost(string, tag = "9")]
7932    pub room_name: ::prost::alloc::string::String,
7933    #[prost(string, tag = "10")]
7934    pub room_id: ::prost::alloc::string::String,
7935    #[prost(string, tag = "11")]
7936    pub participant_identity: ::prost::alloc::string::String,
7937    #[prost(string, tag = "12")]
7938    pub participant_id: ::prost::alloc::string::String,
7939    #[prost(string, tag = "13")]
7940    pub track_id: ::prost::alloc::string::String,
7941    #[prost(message, optional, tag = "14")]
7942    pub started_at: ::core::option::Option<::pbjson_types::Timestamp>,
7943    #[prost(int64, tag = "15")]
7944    pub duration_ns: i64,
7945}
7946#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
7947pub struct WebhookInfo {
7948    #[prost(string, tag = "1")]
7949    pub event_id: ::prost::alloc::string::String,
7950    #[prost(string, tag = "2")]
7951    pub event: ::prost::alloc::string::String,
7952    #[prost(string, tag = "3")]
7953    pub project_id: ::prost::alloc::string::String,
7954    #[prost(string, tag = "4")]
7955    pub room_name: ::prost::alloc::string::String,
7956    #[prost(string, tag = "5")]
7957    pub room_id: ::prost::alloc::string::String,
7958    #[prost(string, tag = "6")]
7959    pub participant_identity: ::prost::alloc::string::String,
7960    #[prost(string, tag = "7")]
7961    pub participant_id: ::prost::alloc::string::String,
7962    #[prost(string, tag = "8")]
7963    pub track_id: ::prost::alloc::string::String,
7964    #[prost(string, tag = "9")]
7965    pub egress_id: ::prost::alloc::string::String,
7966    #[prost(string, tag = "10")]
7967    pub ingress_id: ::prost::alloc::string::String,
7968    #[prost(message, optional, tag = "11")]
7969    pub created_at: ::core::option::Option<::pbjson_types::Timestamp>,
7970    #[prost(message, optional, tag = "12")]
7971    pub queued_at: ::core::option::Option<::pbjson_types::Timestamp>,
7972    #[prost(int64, tag = "13")]
7973    pub queue_duration_ns: i64,
7974    #[prost(message, optional, tag = "14")]
7975    pub sent_at: ::core::option::Option<::pbjson_types::Timestamp>,
7976    #[prost(int64, tag = "15")]
7977    pub send_duration_ns: i64,
7978    #[prost(string, tag = "16")]
7979    pub url: ::prost::alloc::string::String,
7980    #[prost(int32, tag = "17")]
7981    pub num_dropped: i32,
7982    #[prost(bool, tag = "18")]
7983    pub is_dropped: bool,
7984    #[prost(string, tag = "19")]
7985    pub service_status: ::prost::alloc::string::String,
7986    #[prost(int32, tag = "20")]
7987    pub service_error_code: i32,
7988    #[prost(string, tag = "21")]
7989    pub service_error: ::prost::alloc::string::String,
7990    #[prost(string, tag = "22")]
7991    pub send_error: ::prost::alloc::string::String,
7992    /// HTTP response status code for the delivery attempt (0 if no response).
7993    #[prost(int32, tag = "23")]
7994    pub http_status_code: i32,
7995}
7996#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
7997#[repr(i32)]
7998pub enum StreamType {
7999    Upstream = 0,
8000    Downstream = 1,
8001}
8002impl StreamType {
8003    /// String value of the enum field names used in the ProtoBuf definition.
8004    ///
8005    /// The values are not transformed in any way and thus are considered stable
8006    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
8007    pub fn as_str_name(&self) -> &'static str {
8008        match self {
8009            Self::Upstream => "UPSTREAM",
8010            Self::Downstream => "DOWNSTREAM",
8011        }
8012    }
8013    /// Creates an enum from field names used in the ProtoBuf definition.
8014    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
8015        match value {
8016            "UPSTREAM" => Some(Self::Upstream),
8017            "DOWNSTREAM" => Some(Self::Downstream),
8018            _ => None,
8019        }
8020    }
8021}
8022#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
8023#[repr(i32)]
8024pub enum AnalyticsEventType {
8025    RoomCreated = 0,
8026    RoomEnded = 1,
8027    ParticipantJoined = 2,
8028    ParticipantLeft = 3,
8029    ParticipantConnectionAborted = 45,
8030    TrackPublished = 4,
8031    TrackPublishRequested = 20,
8032    TrackUnpublished = 5,
8033    TrackSubscribed = 6,
8034    TrackSubscribeRequested = 21,
8035    TrackSubscribeFailed = 25,
8036    TrackUnsubscribed = 7,
8037    TrackPublishedUpdate = 10,
8038    TrackMuted = 23,
8039    TrackUnmuted = 24,
8040    TrackPublishStats = 26,
8041    TrackSubscribeStats = 27,
8042    ParticipantActive = 11,
8043    ParticipantResumed = 22,
8044    EgressStarted = 12,
8045    EgressEnded = 13,
8046    EgressUpdated = 28,
8047    TrackMaxSubscribedVideoQuality = 14,
8048    Reconnected = 15,
8049    IngressCreated = 18,
8050    IngressDeleted = 19,
8051    IngressStarted = 16,
8052    IngressEnded = 17,
8053    IngressUpdated = 29,
8054    SipInboundTrunkCreated = 30,
8055    SipInboundTrunkDeleted = 31,
8056    SipOutboundTrunkCreated = 32,
8057    SipOutboundTrunkDeleted = 33,
8058    SipDispatchRuleCreated = 34,
8059    SipDispatchRuleDeleted = 35,
8060    SipParticipantCreated = 36,
8061    SipCallIncoming = 37,
8062    SipCallStarted = 38,
8063    SipCallEnded = 39,
8064    SipTransferRequested = 43,
8065    SipTransferComplete = 44,
8066    SipCallUpdate = 46,
8067    Report = 40,
8068    ApiCall = 41,
8069    Webhook = 42,
8070}
8071impl AnalyticsEventType {
8072    /// String value of the enum field names used in the ProtoBuf definition.
8073    ///
8074    /// The values are not transformed in any way and thus are considered stable
8075    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
8076    pub fn as_str_name(&self) -> &'static str {
8077        match self {
8078            Self::RoomCreated => "ROOM_CREATED",
8079            Self::RoomEnded => "ROOM_ENDED",
8080            Self::ParticipantJoined => "PARTICIPANT_JOINED",
8081            Self::ParticipantLeft => "PARTICIPANT_LEFT",
8082            Self::ParticipantConnectionAborted => "PARTICIPANT_CONNECTION_ABORTED",
8083            Self::TrackPublished => "TRACK_PUBLISHED",
8084            Self::TrackPublishRequested => "TRACK_PUBLISH_REQUESTED",
8085            Self::TrackUnpublished => "TRACK_UNPUBLISHED",
8086            Self::TrackSubscribed => "TRACK_SUBSCRIBED",
8087            Self::TrackSubscribeRequested => "TRACK_SUBSCRIBE_REQUESTED",
8088            Self::TrackSubscribeFailed => "TRACK_SUBSCRIBE_FAILED",
8089            Self::TrackUnsubscribed => "TRACK_UNSUBSCRIBED",
8090            Self::TrackPublishedUpdate => "TRACK_PUBLISHED_UPDATE",
8091            Self::TrackMuted => "TRACK_MUTED",
8092            Self::TrackUnmuted => "TRACK_UNMUTED",
8093            Self::TrackPublishStats => "TRACK_PUBLISH_STATS",
8094            Self::TrackSubscribeStats => "TRACK_SUBSCRIBE_STATS",
8095            Self::ParticipantActive => "PARTICIPANT_ACTIVE",
8096            Self::ParticipantResumed => "PARTICIPANT_RESUMED",
8097            Self::EgressStarted => "EGRESS_STARTED",
8098            Self::EgressEnded => "EGRESS_ENDED",
8099            Self::EgressUpdated => "EGRESS_UPDATED",
8100            Self::TrackMaxSubscribedVideoQuality => "TRACK_MAX_SUBSCRIBED_VIDEO_QUALITY",
8101            Self::Reconnected => "RECONNECTED",
8102            Self::IngressCreated => "INGRESS_CREATED",
8103            Self::IngressDeleted => "INGRESS_DELETED",
8104            Self::IngressStarted => "INGRESS_STARTED",
8105            Self::IngressEnded => "INGRESS_ENDED",
8106            Self::IngressUpdated => "INGRESS_UPDATED",
8107            Self::SipInboundTrunkCreated => "SIP_INBOUND_TRUNK_CREATED",
8108            Self::SipInboundTrunkDeleted => "SIP_INBOUND_TRUNK_DELETED",
8109            Self::SipOutboundTrunkCreated => "SIP_OUTBOUND_TRUNK_CREATED",
8110            Self::SipOutboundTrunkDeleted => "SIP_OUTBOUND_TRUNK_DELETED",
8111            Self::SipDispatchRuleCreated => "SIP_DISPATCH_RULE_CREATED",
8112            Self::SipDispatchRuleDeleted => "SIP_DISPATCH_RULE_DELETED",
8113            Self::SipParticipantCreated => "SIP_PARTICIPANT_CREATED",
8114            Self::SipCallIncoming => "SIP_CALL_INCOMING",
8115            Self::SipCallStarted => "SIP_CALL_STARTED",
8116            Self::SipCallEnded => "SIP_CALL_ENDED",
8117            Self::SipTransferRequested => "SIP_TRANSFER_REQUESTED",
8118            Self::SipTransferComplete => "SIP_TRANSFER_COMPLETE",
8119            Self::SipCallUpdate => "SIP_CALL_UPDATE",
8120            Self::Report => "REPORT",
8121            Self::ApiCall => "API_CALL",
8122            Self::Webhook => "WEBHOOK",
8123        }
8124    }
8125    /// Creates an enum from field names used in the ProtoBuf definition.
8126    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
8127        match value {
8128            "ROOM_CREATED" => Some(Self::RoomCreated),
8129            "ROOM_ENDED" => Some(Self::RoomEnded),
8130            "PARTICIPANT_JOINED" => Some(Self::ParticipantJoined),
8131            "PARTICIPANT_LEFT" => Some(Self::ParticipantLeft),
8132            "PARTICIPANT_CONNECTION_ABORTED" => Some(Self::ParticipantConnectionAborted),
8133            "TRACK_PUBLISHED" => Some(Self::TrackPublished),
8134            "TRACK_PUBLISH_REQUESTED" => Some(Self::TrackPublishRequested),
8135            "TRACK_UNPUBLISHED" => Some(Self::TrackUnpublished),
8136            "TRACK_SUBSCRIBED" => Some(Self::TrackSubscribed),
8137            "TRACK_SUBSCRIBE_REQUESTED" => Some(Self::TrackSubscribeRequested),
8138            "TRACK_SUBSCRIBE_FAILED" => Some(Self::TrackSubscribeFailed),
8139            "TRACK_UNSUBSCRIBED" => Some(Self::TrackUnsubscribed),
8140            "TRACK_PUBLISHED_UPDATE" => Some(Self::TrackPublishedUpdate),
8141            "TRACK_MUTED" => Some(Self::TrackMuted),
8142            "TRACK_UNMUTED" => Some(Self::TrackUnmuted),
8143            "TRACK_PUBLISH_STATS" => Some(Self::TrackPublishStats),
8144            "TRACK_SUBSCRIBE_STATS" => Some(Self::TrackSubscribeStats),
8145            "PARTICIPANT_ACTIVE" => Some(Self::ParticipantActive),
8146            "PARTICIPANT_RESUMED" => Some(Self::ParticipantResumed),
8147            "EGRESS_STARTED" => Some(Self::EgressStarted),
8148            "EGRESS_ENDED" => Some(Self::EgressEnded),
8149            "EGRESS_UPDATED" => Some(Self::EgressUpdated),
8150            "TRACK_MAX_SUBSCRIBED_VIDEO_QUALITY" => Some(Self::TrackMaxSubscribedVideoQuality),
8151            "RECONNECTED" => Some(Self::Reconnected),
8152            "INGRESS_CREATED" => Some(Self::IngressCreated),
8153            "INGRESS_DELETED" => Some(Self::IngressDeleted),
8154            "INGRESS_STARTED" => Some(Self::IngressStarted),
8155            "INGRESS_ENDED" => Some(Self::IngressEnded),
8156            "INGRESS_UPDATED" => Some(Self::IngressUpdated),
8157            "SIP_INBOUND_TRUNK_CREATED" => Some(Self::SipInboundTrunkCreated),
8158            "SIP_INBOUND_TRUNK_DELETED" => Some(Self::SipInboundTrunkDeleted),
8159            "SIP_OUTBOUND_TRUNK_CREATED" => Some(Self::SipOutboundTrunkCreated),
8160            "SIP_OUTBOUND_TRUNK_DELETED" => Some(Self::SipOutboundTrunkDeleted),
8161            "SIP_DISPATCH_RULE_CREATED" => Some(Self::SipDispatchRuleCreated),
8162            "SIP_DISPATCH_RULE_DELETED" => Some(Self::SipDispatchRuleDeleted),
8163            "SIP_PARTICIPANT_CREATED" => Some(Self::SipParticipantCreated),
8164            "SIP_CALL_INCOMING" => Some(Self::SipCallIncoming),
8165            "SIP_CALL_STARTED" => Some(Self::SipCallStarted),
8166            "SIP_CALL_ENDED" => Some(Self::SipCallEnded),
8167            "SIP_TRANSFER_REQUESTED" => Some(Self::SipTransferRequested),
8168            "SIP_TRANSFER_COMPLETE" => Some(Self::SipTransferComplete),
8169            "SIP_CALL_UPDATE" => Some(Self::SipCallUpdate),
8170            "REPORT" => Some(Self::Report),
8171            "API_CALL" => Some(Self::ApiCall),
8172            "WEBHOOK" => Some(Self::Webhook),
8173            _ => None,
8174        }
8175    }
8176}
8177include!("livekit.serde.rs");
8178// @@protoc_insertion_point(module)