syntax = "proto3";

package temporal.api.cloud.sink.v1;

option go_package = "go.temporal.io/api/cloud/sink/v1;sink";
option java_package = "io.temporal.api.cloud.sink.v1";
option java_multiple_files = true;
option java_outer_classname = "MessageProto";
option ruby_package = "Temporalio::Api::Cloud::Sink::V1";
option csharp_namespace = "Temporalio.Api.Cloud.Sink.V1";

message S3Spec {
    // The IAM role that Temporal Cloud assumes for writing records to the customer's S3 bucket.
    string role_name = 1;

    // The name of the destination S3 bucket where Temporal will send data.
    string bucket_name = 2;
    
    // The region where the S3 bucket is located.
    string region = 3;

    // The AWS Key Management Service (KMS) ARN used for encryption.
    string kms_arn = 4;

    // The AWS account ID associated with the S3 bucket and the assumed role.
    string aws_account_id = 5;
}

message GCSSpec {
    // The customer service account ID that Temporal Cloud impersonates for writing records to the customer's GCS bucket.
    string sa_id = 1;

    // The name of the destination GCS bucket where Temporal will send data.
    string bucket_name = 2;

    // The GCP project ID associated with the GCS bucket and service account.
    string gcp_project_id = 3;

    // The region of the gcs bucket
    string region = 4;
}

message KinesisSpec {
    // The role Temporal Cloud assumes when writing records to Kinesis
    string role_name = 1;

    // Destination Kinesis endpoint arn for temporal to send data to.
    string destination_uri = 2;

    // The sink's region.
    string region = 3;
}

message PubSubSpec{
    // The customer service account id that Temporal Cloud impersonates for writing records to customer's pubsub topic
    string service_account_id = 1;

    // Destination pubsub topic name for us
    string topic_name = 2;

    // The gcp project id of pubsub topic and service account
    string gcp_project_id = 3;
}