syntax = "proto3";

package livekit;
option go_package = "github.com/livekit/protocol/livekit";
option csharp_namespace = "LiveKit.Proto";
option ruby_package = "LiveKit::Proto";

import "livekit_egress.proto";
import "livekit_ingress.proto";

message StartEgressRequest {
  // request metadata
  string egress_id = 1;
  string request_id = 2;
  string sender_id = 10;
  int64 sent_at = 4;

  // request
  oneof request {
    RoomCompositeEgressRequest room_composite = 5;
    TrackCompositeEgressRequest track_composite = 6;
    TrackEgressRequest track = 7;
  }

  // connection info
  string room_id = 3;
  string token = 8;
  string ws_url = 9;
}

message EgressRequest {
  // request metadata
  string egress_id = 1;
  string request_id = 2;
  string sender_id = 5;

  // request
  oneof request {
    UpdateStreamRequest update_stream = 3;
    StopEgressRequest stop = 4;
  }
}

message EgressResponse {
  EgressInfo info = 1;
  string error = 2;
  string request_id = 3;
}

message IngressRequest {
  // request metadata
  string ingress_id = 1;
  string request_id = 2;
  string sender_id = 3;

  oneof request {
    UpdateIngressRequest update = 4;
    DeleteIngressRequest delete = 5;
  }
}

// Query an ingress info from an ingress ID or stream key
message GetIngressInfoRequest {
  string ingress_id = 1;
  string stream_key = 2;
  string request_id = 3;
  string sender_id = 4;
  int64 sent_at = 5;
}

message IngressResponse {
  IngressInfo info = 1;
  string error = 2;
  string request_id = 3;
}

message GetIngressInfoResponse {
  IngressInfo info = 1;
  string token = 2;
  string ws_url = 3;
  string error = 4;
  string request_id = 5;
}
