syntax = "proto3";

package deployment_artifact.v1;

option csharp_namespace = "ZB.MOM.WW.OtOpcUa.Commons.Protos.DeploymentArtifact.V1";

// Central serves the deployed-configuration artifact bytes to a driver node (per-cluster mesh
// Phase 3). Only admin-role nodes — which hold the central SQL connection — serve; driver nodes in
// FetchAndCache mode are the clients. The bytes travel here, out-of-band, precisely so they never
// ride an Akka message and hit the frame-size limit.
service DeploymentArtifactService {
  // Streams the artifact for a sealed deployment as ordered chunks. NotFound when the id is
  // unknown, the deployment is not sealed, or the blob is empty (existence-hiding + the #485
  // "empty bytes are never an empty config" rule). The client verifies
  // SHA-256(reassembled) == the RevisionHash it already holds from DispatchDeployment, so no hash
  // is carried here.
  rpc Fetch(FetchRequest) returns (stream ArtifactChunk);
}

message FetchRequest {
  string deployment_id = 1;
}

message ArtifactChunk {
  bytes data = 1;
}
