Skip to main content

livekit_protocol/
livekit.rs

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