// @generated by protobuf-ts 2.10.0 with parameter long_type_string,client_generic,server_none,eslint_disable,optimize_code_size
// @generated from protobuf file "video/sfu/signal_rpc/signal.proto" (package "stream.video.sfu.signal", syntax proto3)
// tslint:disable
import { ICETrickle } from '../models/models';
import { ServiceType } from '@protobuf-ts/runtime-rpc';
import { MessageType } from '@protobuf-ts/runtime';
import { TrackInfo } from '../models/models';
import { VideoDimension } from '../models/models';
import { TrackType } from '../models/models';
import { PeerType } from '../models/models';
import { PerformanceStats } from '../models/models';
import { RTMPIngress } from '../models/models';
import { AppleState } from '../models/models';
import { AndroidState } from '../models/models';
import { InputDevices } from '../models/models';
import { RemoteOutboundRtp } from '../models/models';
import { RemoteInboundRtp } from '../models/models';
import { OutboundRtp } from '../models/models';
import { InboundRtp } from '../models/models';
import { WebsocketReconnectStrategy } from '../models/models';
import { Error } from '../models/models';
/**
 * @generated from protobuf message stream.video.sfu.signal.StartNoiseCancellationRequest
 */
export interface StartNoiseCancellationRequest {
  /**
   * @generated from protobuf field: string session_id = 1;
   */
  sessionId: string;
}
/**
 * @generated from protobuf message stream.video.sfu.signal.StartNoiseCancellationResponse
 */
export interface StartNoiseCancellationResponse {
  /**
   * @generated from protobuf field: stream.video.sfu.models.Error error = 1;
   */
  error?: Error;
}
/**
 * @generated from protobuf message stream.video.sfu.signal.StopNoiseCancellationRequest
 */
export interface StopNoiseCancellationRequest {
  /**
   * @generated from protobuf field: string session_id = 1;
   */
  sessionId: string;
}
/**
 * @generated from protobuf message stream.video.sfu.signal.StopNoiseCancellationResponse
 */
export interface StopNoiseCancellationResponse {
  /**
   * @generated from protobuf field: stream.video.sfu.models.Error error = 1;
   */
  error?: Error;
}
/**
 * @generated from protobuf message stream.video.sfu.signal.Reconnection
 */
export interface Reconnection {
  /**
   * @generated from protobuf field: float time_seconds = 1;
   */
  timeSeconds: number;
  /**
   * @generated from protobuf field: stream.video.sfu.models.WebsocketReconnectStrategy strategy = 2;
   */
  strategy: WebsocketReconnectStrategy;
}
/**
 * @generated from protobuf message stream.video.sfu.signal.Telemetry
 */
export interface Telemetry {
  /**
   * @generated from protobuf oneof: data
   */
  data:
    | {
        oneofKind: 'connectionTimeSeconds';
        /**
         * @generated from protobuf field: float connection_time_seconds = 1;
         */
        connectionTimeSeconds: number;
      }
    | {
        oneofKind: 'reconnection';
        /**
         * @generated from protobuf field: stream.video.sfu.signal.Reconnection reconnection = 2;
         */
        reconnection: Reconnection;
      }
    | {
        oneofKind: undefined;
      };
}
/**
 * @generated from protobuf message stream.video.sfu.signal.SendMetricsRequest
 */
export interface SendMetricsRequest {
  /**
   * @generated from protobuf field: string session_id = 1;
   */
  sessionId: string;
  /**
   * @generated from protobuf field: string unified_session_id = 2;
   */
  unifiedSessionId: string;
  /**
   * @generated from protobuf field: repeated stream.video.sfu.models.InboundRtp inbounds = 3;
   */
  inbounds: InboundRtp[];
  /**
   * @generated from protobuf field: repeated stream.video.sfu.models.OutboundRtp outbounds = 4;
   */
  outbounds: OutboundRtp[];
  /**
   * @generated from protobuf field: repeated stream.video.sfu.models.RemoteInboundRtp remote_inbounds = 5;
   */
  remoteInbounds: RemoteInboundRtp[];
  /**
   * @generated from protobuf field: repeated stream.video.sfu.models.RemoteOutboundRtp remote_outbounds = 6;
   */
  remoteOutbounds: RemoteOutboundRtp[];
}
/**
 * @generated from protobuf message stream.video.sfu.signal.SendMetricsResponse
 */
export interface SendMetricsResponse {}
/**
 * @generated from protobuf message stream.video.sfu.signal.SendStatsRequest
 */
export interface SendStatsRequest {
  /**
   * @generated from protobuf field: string session_id = 1;
   */
  sessionId: string;
  /**
   * @generated from protobuf field: string subscriber_stats = 2;
   */
  subscriberStats: string;
  /**
   * @generated from protobuf field: string publisher_stats = 3;
   */
  publisherStats: string;
  /**
   * @generated from protobuf field: string webrtc_version = 4;
   */
  webrtcVersion: string;
  /**
   * @generated from protobuf field: string sdk = 5;
   */
  sdk: string;
  /**
   * @generated from protobuf field: string sdk_version = 6;
   */
  sdkVersion: string;
  /**
   * @generated from protobuf field: stream.video.sfu.models.InputDevices audio_devices = 7;
   */
  audioDevices?: InputDevices;
  /**
   * @generated from protobuf field: stream.video.sfu.models.InputDevices video_devices = 8;
   */
  videoDevices?: InputDevices;
  /**
   * @generated from protobuf oneof: device_state
   */
  deviceState:
    | {
        oneofKind: 'android';
        /**
         * @generated from protobuf field: stream.video.sfu.models.AndroidState android = 9;
         */
        android: AndroidState;
      }
    | {
        oneofKind: 'apple';
        /**
         * @generated from protobuf field: stream.video.sfu.models.AppleState apple = 10;
         */
        apple: AppleState;
      }
    | {
        oneofKind: undefined;
      };
  /**
   * @generated from protobuf field: stream.video.sfu.signal.Telemetry telemetry = 11;
   */
  telemetry?: Telemetry;
  /**
   * @generated from protobuf field: stream.video.sfu.models.RTMPIngress rtmp = 12;
   */
  rtmp?: RTMPIngress;
  /**
   * @deprecated
   * @generated from protobuf field: string subscriber_rtc_stats = 13 [deprecated = true];
   */
  subscriberRtcStats: string;
  /**
   * @deprecated
   * @generated from protobuf field: string publisher_rtc_stats = 14 [deprecated = true];
   */
  publisherRtcStats: string;
  /**
   * @generated from protobuf field: string rtc_stats = 15;
   */
  rtcStats: string;
  /**
   * Encode stats for the publisher
   *
   * @generated from protobuf field: repeated stream.video.sfu.models.PerformanceStats encode_stats = 16;
   */
  encodeStats: PerformanceStats[];
  /**
   * Decode stats for the subscriber
   *
   * @generated from protobuf field: repeated stream.video.sfu.models.PerformanceStats decode_stats = 17;
   */
  decodeStats: PerformanceStats[];
  /**
   * user_session id can change during reconnects, this helps us to
   * identify the user across reconnects and should remain consistent until the user explicitly
   * disconnects, is kicked or the call is ended.
   *
   * @generated from protobuf field: string unified_session_id = 18;
   */
  unifiedSessionId: string;
}
/**
 * @generated from protobuf message stream.video.sfu.signal.SendStatsResponse
 */
export interface SendStatsResponse {
  /**
   * @generated from protobuf field: stream.video.sfu.models.Error error = 1;
   */
  error?: Error;
}
/**
 * @generated from protobuf message stream.video.sfu.signal.ICERestartRequest
 */
export interface ICERestartRequest {
  /**
   * @generated from protobuf field: string session_id = 1;
   */
  sessionId: string;
  /**
   * @generated from protobuf field: stream.video.sfu.models.PeerType peer_type = 2;
   */
  peerType: PeerType;
}
/**
 * @generated from protobuf message stream.video.sfu.signal.ICERestartResponse
 */
export interface ICERestartResponse {
  /**
   * @generated from protobuf field: stream.video.sfu.models.Error error = 1;
   */
  error?: Error;
}
/**
 * @generated from protobuf message stream.video.sfu.signal.UpdateMuteStatesRequest
 */
export interface UpdateMuteStatesRequest {
  /**
   * @generated from protobuf field: string session_id = 1;
   */
  sessionId: string;
  /**
   * @generated from protobuf field: repeated stream.video.sfu.signal.TrackMuteState mute_states = 3;
   */
  muteStates: TrackMuteState[];
}
/**
 * @generated from protobuf message stream.video.sfu.signal.UpdateMuteStatesResponse
 */
export interface UpdateMuteStatesResponse {
  /**
   * @generated from protobuf field: stream.video.sfu.models.Error error = 4;
   */
  error?: Error;
}
/**
 * @generated from protobuf message stream.video.sfu.signal.TrackMuteState
 */
export interface TrackMuteState {
  /**
   * @generated from protobuf field: stream.video.sfu.models.TrackType track_type = 1;
   */
  trackType: TrackType;
  /**
   * @generated from protobuf field: bool muted = 2;
   */
  muted: boolean;
}
/**
 * @generated from protobuf message stream.video.sfu.signal.AudioMuteChanged
 */
export interface AudioMuteChanged {
  /**
   * @generated from protobuf field: bool muted = 1;
   */
  muted: boolean;
}
/**
 * @generated from protobuf message stream.video.sfu.signal.VideoMuteChanged
 */
export interface VideoMuteChanged {
  /**
   * @generated from protobuf field: bool muted = 2;
   */
  muted: boolean;
}
/**
 * @generated from protobuf message stream.video.sfu.signal.UpdateSubscriptionsRequest
 */
export interface UpdateSubscriptionsRequest {
  /**
   * @generated from protobuf field: string session_id = 2;
   */
  sessionId: string;
  /**
   * @generated from protobuf field: repeated stream.video.sfu.signal.TrackSubscriptionDetails tracks = 3;
   */
  tracks: TrackSubscriptionDetails[];
}
/**
 * @generated from protobuf message stream.video.sfu.signal.UpdateSubscriptionsResponse
 */
export interface UpdateSubscriptionsResponse {
  /**
   * @generated from protobuf field: stream.video.sfu.models.Error error = 4;
   */
  error?: Error;
}
/**
 * @generated from protobuf message stream.video.sfu.signal.TrackSubscriptionDetails
 */
export interface TrackSubscriptionDetails {
  /**
   * @generated from protobuf field: string user_id = 1;
   */
  userId: string;
  /**
   * @generated from protobuf field: string session_id = 2;
   */
  sessionId: string;
  /**
   * @generated from protobuf field: stream.video.sfu.models.TrackType track_type = 3;
   */
  trackType: TrackType;
  /**
   * @generated from protobuf field: stream.video.sfu.models.VideoDimension dimension = 4;
   */
  dimension?: VideoDimension;
}
/**
 * @generated from protobuf message stream.video.sfu.signal.SendAnswerRequest
 */
export interface SendAnswerRequest {
  /**
   * @generated from protobuf field: stream.video.sfu.models.PeerType peer_type = 1;
   */
  peerType: PeerType;
  /**
   * @generated from protobuf field: string sdp = 2;
   */
  sdp: string;
  /**
   * @generated from protobuf field: string session_id = 3;
   */
  sessionId: string;
  /**
   * @generated from protobuf field: uint32 negotiation_id = 4;
   */
  negotiationId: number;
}
/**
 * @generated from protobuf message stream.video.sfu.signal.SendAnswerResponse
 */
export interface SendAnswerResponse {
  /**
   * @generated from protobuf field: stream.video.sfu.models.Error error = 4;
   */
  error?: Error;
}
/**
 * @generated from protobuf message stream.video.sfu.signal.ICETrickleResponse
 */
export interface ICETrickleResponse {
  /**
   * @generated from protobuf field: stream.video.sfu.models.Error error = 4;
   */
  error?: Error;
}
/**
 * @generated from protobuf message stream.video.sfu.signal.SetPublisherRequest
 */
export interface SetPublisherRequest {
  /**
   * sdp offer
   *
   * @generated from protobuf field: string sdp = 1;
   */
  sdp: string;
  /**
   * @generated from protobuf field: string session_id = 2;
   */
  sessionId: string;
  /**
   * @generated from protobuf field: repeated stream.video.sfu.models.TrackInfo tracks = 3;
   */
  tracks: TrackInfo[];
}
/**
 * @generated from protobuf message stream.video.sfu.signal.SetPublisherResponse
 */
export interface SetPublisherResponse {
  /**
   * sdp answer
   *
   * @generated from protobuf field: string sdp = 1;
   */
  sdp: string;
  /**
   * @generated from protobuf field: string session_id = 2;
   */
  sessionId: string;
  /**
   * @generated from protobuf field: bool ice_restart = 3;
   */
  iceRestart: boolean;
  /**
   * @generated from protobuf field: stream.video.sfu.models.Error error = 4;
   */
  error?: Error;
}
// @generated message type with reflection information, may provide speed optimized methods
class StartNoiseCancellationRequest$Type extends MessageType<StartNoiseCancellationRequest> {
  constructor() {
    super('stream.video.sfu.signal.StartNoiseCancellationRequest', [
      { no: 1, name: 'session_id', kind: 'scalar', T: 9 /*ScalarType.STRING*/ },
    ]);
  }
}
/**
 * @generated MessageType for protobuf message stream.video.sfu.signal.StartNoiseCancellationRequest
 */
export const StartNoiseCancellationRequest =
  new StartNoiseCancellationRequest$Type();
// @generated message type with reflection information, may provide speed optimized methods
class StartNoiseCancellationResponse$Type extends MessageType<StartNoiseCancellationResponse> {
  constructor() {
    super('stream.video.sfu.signal.StartNoiseCancellationResponse', [
      { no: 1, name: 'error', kind: 'message', T: () => Error },
    ]);
  }
}
/**
 * @generated MessageType for protobuf message stream.video.sfu.signal.StartNoiseCancellationResponse
 */
export const StartNoiseCancellationResponse =
  new StartNoiseCancellationResponse$Type();
// @generated message type with reflection information, may provide speed optimized methods
class StopNoiseCancellationRequest$Type extends MessageType<StopNoiseCancellationRequest> {
  constructor() {
    super('stream.video.sfu.signal.StopNoiseCancellationRequest', [
      { no: 1, name: 'session_id', kind: 'scalar', T: 9 /*ScalarType.STRING*/ },
    ]);
  }
}
/**
 * @generated MessageType for protobuf message stream.video.sfu.signal.StopNoiseCancellationRequest
 */
export const StopNoiseCancellationRequest =
  new StopNoiseCancellationRequest$Type();
// @generated message type with reflection information, may provide speed optimized methods
class StopNoiseCancellationResponse$Type extends MessageType<StopNoiseCancellationResponse> {
  constructor() {
    super('stream.video.sfu.signal.StopNoiseCancellationResponse', [
      { no: 1, name: 'error', kind: 'message', T: () => Error },
    ]);
  }
}
/**
 * @generated MessageType for protobuf message stream.video.sfu.signal.StopNoiseCancellationResponse
 */
export const StopNoiseCancellationResponse =
  new StopNoiseCancellationResponse$Type();
// @generated message type with reflection information, may provide speed optimized methods
class Reconnection$Type extends MessageType<Reconnection> {
  constructor() {
    super('stream.video.sfu.signal.Reconnection', [
      {
        no: 1,
        name: 'time_seconds',
        kind: 'scalar',
        T: 2 /*ScalarType.FLOAT*/,
      },
      {
        no: 2,
        name: 'strategy',
        kind: 'enum',
        T: () => [
          'stream.video.sfu.models.WebsocketReconnectStrategy',
          WebsocketReconnectStrategy,
          'WEBSOCKET_RECONNECT_STRATEGY_',
        ],
      },
    ]);
  }
}
/**
 * @generated MessageType for protobuf message stream.video.sfu.signal.Reconnection
 */
export const Reconnection = new Reconnection$Type();
// @generated message type with reflection information, may provide speed optimized methods
class Telemetry$Type extends MessageType<Telemetry> {
  constructor() {
    super('stream.video.sfu.signal.Telemetry', [
      {
        no: 1,
        name: 'connection_time_seconds',
        kind: 'scalar',
        oneof: 'data',
        T: 2 /*ScalarType.FLOAT*/,
      },
      {
        no: 2,
        name: 'reconnection',
        kind: 'message',
        oneof: 'data',
        T: () => Reconnection,
      },
    ]);
  }
}
/**
 * @generated MessageType for protobuf message stream.video.sfu.signal.Telemetry
 */
export const Telemetry = new Telemetry$Type();
// @generated message type with reflection information, may provide speed optimized methods
class SendMetricsRequest$Type extends MessageType<SendMetricsRequest> {
  constructor() {
    super('stream.video.sfu.signal.SendMetricsRequest', [
      { no: 1, name: 'session_id', kind: 'scalar', T: 9 /*ScalarType.STRING*/ },
      {
        no: 2,
        name: 'unified_session_id',
        kind: 'scalar',
        T: 9 /*ScalarType.STRING*/,
      },
      {
        no: 3,
        name: 'inbounds',
        kind: 'message',
        repeat: 2 /*RepeatType.UNPACKED*/,
        T: () => InboundRtp,
      },
      {
        no: 4,
        name: 'outbounds',
        kind: 'message',
        repeat: 2 /*RepeatType.UNPACKED*/,
        T: () => OutboundRtp,
      },
      {
        no: 5,
        name: 'remote_inbounds',
        kind: 'message',
        repeat: 2 /*RepeatType.UNPACKED*/,
        T: () => RemoteInboundRtp,
      },
      {
        no: 6,
        name: 'remote_outbounds',
        kind: 'message',
        repeat: 2 /*RepeatType.UNPACKED*/,
        T: () => RemoteOutboundRtp,
      },
    ]);
  }
}
/**
 * @generated MessageType for protobuf message stream.video.sfu.signal.SendMetricsRequest
 */
export const SendMetricsRequest = new SendMetricsRequest$Type();
// @generated message type with reflection information, may provide speed optimized methods
class SendMetricsResponse$Type extends MessageType<SendMetricsResponse> {
  constructor() {
    super('stream.video.sfu.signal.SendMetricsResponse', []);
  }
}
/**
 * @generated MessageType for protobuf message stream.video.sfu.signal.SendMetricsResponse
 */
export const SendMetricsResponse = new SendMetricsResponse$Type();
// @generated message type with reflection information, may provide speed optimized methods
class SendStatsRequest$Type extends MessageType<SendStatsRequest> {
  constructor() {
    super('stream.video.sfu.signal.SendStatsRequest', [
      { no: 1, name: 'session_id', kind: 'scalar', T: 9 /*ScalarType.STRING*/ },
      {
        no: 2,
        name: 'subscriber_stats',
        kind: 'scalar',
        T: 9 /*ScalarType.STRING*/,
      },
      {
        no: 3,
        name: 'publisher_stats',
        kind: 'scalar',
        T: 9 /*ScalarType.STRING*/,
      },
      {
        no: 4,
        name: 'webrtc_version',
        kind: 'scalar',
        T: 9 /*ScalarType.STRING*/,
      },
      { no: 5, name: 'sdk', kind: 'scalar', T: 9 /*ScalarType.STRING*/ },
      {
        no: 6,
        name: 'sdk_version',
        kind: 'scalar',
        T: 9 /*ScalarType.STRING*/,
      },
      { no: 7, name: 'audio_devices', kind: 'message', T: () => InputDevices },
      { no: 8, name: 'video_devices', kind: 'message', T: () => InputDevices },
      {
        no: 9,
        name: 'android',
        kind: 'message',
        oneof: 'deviceState',
        T: () => AndroidState,
      },
      {
        no: 10,
        name: 'apple',
        kind: 'message',
        oneof: 'deviceState',
        T: () => AppleState,
      },
      { no: 11, name: 'telemetry', kind: 'message', T: () => Telemetry },
      { no: 12, name: 'rtmp', kind: 'message', T: () => RTMPIngress },
      {
        no: 13,
        name: 'subscriber_rtc_stats',
        kind: 'scalar',
        T: 9 /*ScalarType.STRING*/,
      },
      {
        no: 14,
        name: 'publisher_rtc_stats',
        kind: 'scalar',
        T: 9 /*ScalarType.STRING*/,
      },
      { no: 15, name: 'rtc_stats', kind: 'scalar', T: 9 /*ScalarType.STRING*/ },
      {
        no: 16,
        name: 'encode_stats',
        kind: 'message',
        repeat: 2 /*RepeatType.UNPACKED*/,
        T: () => PerformanceStats,
      },
      {
        no: 17,
        name: 'decode_stats',
        kind: 'message',
        repeat: 2 /*RepeatType.UNPACKED*/,
        T: () => PerformanceStats,
      },
      {
        no: 18,
        name: 'unified_session_id',
        kind: 'scalar',
        T: 9 /*ScalarType.STRING*/,
      },
    ]);
  }
}
/**
 * @generated MessageType for protobuf message stream.video.sfu.signal.SendStatsRequest
 */
export const SendStatsRequest = new SendStatsRequest$Type();
// @generated message type with reflection information, may provide speed optimized methods
class SendStatsResponse$Type extends MessageType<SendStatsResponse> {
  constructor() {
    super('stream.video.sfu.signal.SendStatsResponse', [
      { no: 1, name: 'error', kind: 'message', T: () => Error },
    ]);
  }
}
/**
 * @generated MessageType for protobuf message stream.video.sfu.signal.SendStatsResponse
 */
export const SendStatsResponse = new SendStatsResponse$Type();
// @generated message type with reflection information, may provide speed optimized methods
class ICERestartRequest$Type extends MessageType<ICERestartRequest> {
  constructor() {
    super('stream.video.sfu.signal.ICERestartRequest', [
      { no: 1, name: 'session_id', kind: 'scalar', T: 9 /*ScalarType.STRING*/ },
      {
        no: 2,
        name: 'peer_type',
        kind: 'enum',
        T: () => ['stream.video.sfu.models.PeerType', PeerType, 'PEER_TYPE_'],
      },
    ]);
  }
}
/**
 * @generated MessageType for protobuf message stream.video.sfu.signal.ICERestartRequest
 */
export const ICERestartRequest = new ICERestartRequest$Type();
// @generated message type with reflection information, may provide speed optimized methods
class ICERestartResponse$Type extends MessageType<ICERestartResponse> {
  constructor() {
    super('stream.video.sfu.signal.ICERestartResponse', [
      { no: 1, name: 'error', kind: 'message', T: () => Error },
    ]);
  }
}
/**
 * @generated MessageType for protobuf message stream.video.sfu.signal.ICERestartResponse
 */
export const ICERestartResponse = new ICERestartResponse$Type();
// @generated message type with reflection information, may provide speed optimized methods
class UpdateMuteStatesRequest$Type extends MessageType<UpdateMuteStatesRequest> {
  constructor() {
    super('stream.video.sfu.signal.UpdateMuteStatesRequest', [
      { no: 1, name: 'session_id', kind: 'scalar', T: 9 /*ScalarType.STRING*/ },
      {
        no: 3,
        name: 'mute_states',
        kind: 'message',
        repeat: 2 /*RepeatType.UNPACKED*/,
        T: () => TrackMuteState,
      },
    ]);
  }
}
/**
 * @generated MessageType for protobuf message stream.video.sfu.signal.UpdateMuteStatesRequest
 */
export const UpdateMuteStatesRequest = new UpdateMuteStatesRequest$Type();
// @generated message type with reflection information, may provide speed optimized methods
class UpdateMuteStatesResponse$Type extends MessageType<UpdateMuteStatesResponse> {
  constructor() {
    super('stream.video.sfu.signal.UpdateMuteStatesResponse', [
      { no: 4, name: 'error', kind: 'message', T: () => Error },
    ]);
  }
}
/**
 * @generated MessageType for protobuf message stream.video.sfu.signal.UpdateMuteStatesResponse
 */
export const UpdateMuteStatesResponse = new UpdateMuteStatesResponse$Type();
// @generated message type with reflection information, may provide speed optimized methods
class TrackMuteState$Type extends MessageType<TrackMuteState> {
  constructor() {
    super('stream.video.sfu.signal.TrackMuteState', [
      {
        no: 1,
        name: 'track_type',
        kind: 'enum',
        T: () => [
          'stream.video.sfu.models.TrackType',
          TrackType,
          'TRACK_TYPE_',
        ],
      },
      { no: 2, name: 'muted', kind: 'scalar', T: 8 /*ScalarType.BOOL*/ },
    ]);
  }
}
/**
 * @generated MessageType for protobuf message stream.video.sfu.signal.TrackMuteState
 */
export const TrackMuteState = new TrackMuteState$Type();
// @generated message type with reflection information, may provide speed optimized methods
class AudioMuteChanged$Type extends MessageType<AudioMuteChanged> {
  constructor() {
    super('stream.video.sfu.signal.AudioMuteChanged', [
      { no: 1, name: 'muted', kind: 'scalar', T: 8 /*ScalarType.BOOL*/ },
    ]);
  }
}
/**
 * @generated MessageType for protobuf message stream.video.sfu.signal.AudioMuteChanged
 */
export const AudioMuteChanged = new AudioMuteChanged$Type();
// @generated message type with reflection information, may provide speed optimized methods
class VideoMuteChanged$Type extends MessageType<VideoMuteChanged> {
  constructor() {
    super('stream.video.sfu.signal.VideoMuteChanged', [
      { no: 2, name: 'muted', kind: 'scalar', T: 8 /*ScalarType.BOOL*/ },
    ]);
  }
}
/**
 * @generated MessageType for protobuf message stream.video.sfu.signal.VideoMuteChanged
 */
export const VideoMuteChanged = new VideoMuteChanged$Type();
// @generated message type with reflection information, may provide speed optimized methods
class UpdateSubscriptionsRequest$Type extends MessageType<UpdateSubscriptionsRequest> {
  constructor() {
    super('stream.video.sfu.signal.UpdateSubscriptionsRequest', [
      { no: 2, name: 'session_id', kind: 'scalar', T: 9 /*ScalarType.STRING*/ },
      {
        no: 3,
        name: 'tracks',
        kind: 'message',
        repeat: 2 /*RepeatType.UNPACKED*/,
        T: () => TrackSubscriptionDetails,
      },
    ]);
  }
}
/**
 * @generated MessageType for protobuf message stream.video.sfu.signal.UpdateSubscriptionsRequest
 */
export const UpdateSubscriptionsRequest = new UpdateSubscriptionsRequest$Type();
// @generated message type with reflection information, may provide speed optimized methods
class UpdateSubscriptionsResponse$Type extends MessageType<UpdateSubscriptionsResponse> {
  constructor() {
    super('stream.video.sfu.signal.UpdateSubscriptionsResponse', [
      { no: 4, name: 'error', kind: 'message', T: () => Error },
    ]);
  }
}
/**
 * @generated MessageType for protobuf message stream.video.sfu.signal.UpdateSubscriptionsResponse
 */
export const UpdateSubscriptionsResponse =
  new UpdateSubscriptionsResponse$Type();
// @generated message type with reflection information, may provide speed optimized methods
class TrackSubscriptionDetails$Type extends MessageType<TrackSubscriptionDetails> {
  constructor() {
    super('stream.video.sfu.signal.TrackSubscriptionDetails', [
      { no: 1, name: 'user_id', kind: 'scalar', T: 9 /*ScalarType.STRING*/ },
      { no: 2, name: 'session_id', kind: 'scalar', T: 9 /*ScalarType.STRING*/ },
      {
        no: 3,
        name: 'track_type',
        kind: 'enum',
        T: () => [
          'stream.video.sfu.models.TrackType',
          TrackType,
          'TRACK_TYPE_',
        ],
      },
      { no: 4, name: 'dimension', kind: 'message', T: () => VideoDimension },
    ]);
  }
}
/**
 * @generated MessageType for protobuf message stream.video.sfu.signal.TrackSubscriptionDetails
 */
export const TrackSubscriptionDetails = new TrackSubscriptionDetails$Type();
// @generated message type with reflection information, may provide speed optimized methods
class SendAnswerRequest$Type extends MessageType<SendAnswerRequest> {
  constructor() {
    super('stream.video.sfu.signal.SendAnswerRequest', [
      {
        no: 1,
        name: 'peer_type',
        kind: 'enum',
        T: () => ['stream.video.sfu.models.PeerType', PeerType, 'PEER_TYPE_'],
      },
      { no: 2, name: 'sdp', kind: 'scalar', T: 9 /*ScalarType.STRING*/ },
      { no: 3, name: 'session_id', kind: 'scalar', T: 9 /*ScalarType.STRING*/ },
      {
        no: 4,
        name: 'negotiation_id',
        kind: 'scalar',
        T: 13 /*ScalarType.UINT32*/,
      },
    ]);
  }
}
/**
 * @generated MessageType for protobuf message stream.video.sfu.signal.SendAnswerRequest
 */
export const SendAnswerRequest = new SendAnswerRequest$Type();
// @generated message type with reflection information, may provide speed optimized methods
class SendAnswerResponse$Type extends MessageType<SendAnswerResponse> {
  constructor() {
    super('stream.video.sfu.signal.SendAnswerResponse', [
      { no: 4, name: 'error', kind: 'message', T: () => Error },
    ]);
  }
}
/**
 * @generated MessageType for protobuf message stream.video.sfu.signal.SendAnswerResponse
 */
export const SendAnswerResponse = new SendAnswerResponse$Type();
// @generated message type with reflection information, may provide speed optimized methods
class ICETrickleResponse$Type extends MessageType<ICETrickleResponse> {
  constructor() {
    super('stream.video.sfu.signal.ICETrickleResponse', [
      { no: 4, name: 'error', kind: 'message', T: () => Error },
    ]);
  }
}
/**
 * @generated MessageType for protobuf message stream.video.sfu.signal.ICETrickleResponse
 */
export const ICETrickleResponse = new ICETrickleResponse$Type();
// @generated message type with reflection information, may provide speed optimized methods
class SetPublisherRequest$Type extends MessageType<SetPublisherRequest> {
  constructor() {
    super('stream.video.sfu.signal.SetPublisherRequest', [
      { no: 1, name: 'sdp', kind: 'scalar', T: 9 /*ScalarType.STRING*/ },
      { no: 2, name: 'session_id', kind: 'scalar', T: 9 /*ScalarType.STRING*/ },
      {
        no: 3,
        name: 'tracks',
        kind: 'message',
        repeat: 2 /*RepeatType.UNPACKED*/,
        T: () => TrackInfo,
      },
    ]);
  }
}
/**
 * @generated MessageType for protobuf message stream.video.sfu.signal.SetPublisherRequest
 */
export const SetPublisherRequest = new SetPublisherRequest$Type();
// @generated message type with reflection information, may provide speed optimized methods
class SetPublisherResponse$Type extends MessageType<SetPublisherResponse> {
  constructor() {
    super('stream.video.sfu.signal.SetPublisherResponse', [
      { no: 1, name: 'sdp', kind: 'scalar', T: 9 /*ScalarType.STRING*/ },
      { no: 2, name: 'session_id', kind: 'scalar', T: 9 /*ScalarType.STRING*/ },
      { no: 3, name: 'ice_restart', kind: 'scalar', T: 8 /*ScalarType.BOOL*/ },
      { no: 4, name: 'error', kind: 'message', T: () => Error },
    ]);
  }
}
/**
 * @generated MessageType for protobuf message stream.video.sfu.signal.SetPublisherResponse
 */
export const SetPublisherResponse = new SetPublisherResponse$Type();
/**
 * @generated ServiceType for protobuf service stream.video.sfu.signal.SignalServer
 */
export const SignalServer = new ServiceType(
  'stream.video.sfu.signal.SignalServer',
  [
    {
      name: 'SetPublisher',
      options: {},
      I: SetPublisherRequest,
      O: SetPublisherResponse,
    },
    {
      name: 'SendAnswer',
      options: {},
      I: SendAnswerRequest,
      O: SendAnswerResponse,
    },
    { name: 'IceTrickle', options: {}, I: ICETrickle, O: ICETrickleResponse },
    {
      name: 'UpdateSubscriptions',
      options: {},
      I: UpdateSubscriptionsRequest,
      O: UpdateSubscriptionsResponse,
    },
    {
      name: 'UpdateMuteStates',
      options: {},
      I: UpdateMuteStatesRequest,
      O: UpdateMuteStatesResponse,
    },
    {
      name: 'IceRestart',
      options: {},
      I: ICERestartRequest,
      O: ICERestartResponse,
    },
    {
      name: 'SendStats',
      options: {},
      I: SendStatsRequest,
      O: SendStatsResponse,
    },
    {
      name: 'SendMetrics',
      options: {},
      I: SendMetricsRequest,
      O: SendMetricsResponse,
    },
    {
      name: 'StartNoiseCancellation',
      options: {},
      I: StartNoiseCancellationRequest,
      O: StartNoiseCancellationResponse,
    },
    {
      name: 'StopNoiseCancellation',
      options: {},
      I: StopNoiseCancellationRequest,
      O: StopNoiseCancellationResponse,
    },
  ],
);
