syntax = "proto3";

package cast.v2;

import "google/protobuf/empty.proto";
import "cast/cast_core/api/v2/cast_message.proto";
import "cast/cast_core/api/v2/url_rewrite.proto";
import "cast/cast_core/api/web/message_channel.proto";

option optimize_for = LITE_RUNTIME;

// Cast application Service
//
// This service is implemented by the Runtime and represents services
// specific to a Cast application.
service RuntimeApplicationService {
  // Notifies the runtime that a new Cast V2 virtual connection has been opened.
  rpc OnVirtualConnectionOpen(VirtualConnectionInfo)
      returns (google.protobuf.Empty);

  // Notifies the runtime that a Cast V2 virtual connection has been closed.
  rpc OnVirtualConnectionClosed(VirtualConnectionInfo)
      returns (google.protobuf.Empty);

  // Sends a Cast message to the runtime.
  rpc SendCastMessage(CastMessage) returns (CastMessageResponse);

  // Set the URL rewrite rules that the Runtime will use to contact the MSP
  // This is called when the rewrite rules are changed
  // A non streaming API for simplicity
  rpc SetUrlRewriteRules(SetUrlRewriteRulesRequest)
      returns (SetUrlRewriteRulesResponse);

  // "MessageConnectorService" provides the transport for MessagePorts.
  // MessagePorts are connected using other services (e.g. ApiBindings), then
  // registered with the MessageConnectorService to communicate over IPC
  rpc PostMessage(cast.web.Message) returns (cast.web.MessagePortStatus);
}

// Request to set the URL rewrite rules on the runtime application.
message SetUrlRewriteRulesRequest {
  // URL rewrite rules.
  UrlRequestRewriteRules rules = 1;
}

message SetUrlRewriteRulesResponse {}

// Request by the sender to open or close a virtual connection to the Cast
// runtime.
message VirtualConnectionInfo {
  // The source of the virtual connection request.  Connections from the
  // sender platform use an id of 'sender-0' and connections from applications
  // use a unique ID.
  string source_id = 1;
  // The destination of the connection request.  Connections to the Cast
  // receiver platform use an id of 'receiver-0' and connections to applications
  // use the Cast session id.
  string destination_id = 2;
}
