From a2dbec5a0fa78ae687375c5131ae60a5da9a49ff Mon Sep 17 00:00:00 2001 From: Ravi Suhag Date: Sun, 29 Mar 2026 01:11:08 -0500 Subject: [PATCH 1/2] feat(compass): add entity v2 RPCs and messages New entity system RPCs alongside existing asset RPCs: Entity CRUD: - GetAllEntities, GetEntityByID, UpsertEntity, DeleteEntity - SearchEntities (keyword/semantic/hybrid modes) - SuggestEntities, GetEntityTypes Context & Impact: - GetEntityContext: assembled context subgraph (entity + edges + related) - GetEntityImpact: downstream blast radius analysis Edge CRUD: - UpsertEdge, GetEdges, DeleteEdge New messages: Entity, Edge (with temporal valid_from/valid_to), and all request/response types for the above RPCs. --- raystack/compass/v1beta1/service.proto | 198 +++++++++++++++++++++++++ 1 file changed, 198 insertions(+) diff --git a/raystack/compass/v1beta1/service.proto b/raystack/compass/v1beta1/service.proto index 8fd8ed52..60fb0ab6 100644 --- a/raystack/compass/v1beta1/service.proto +++ b/raystack/compass/v1beta1/service.proto @@ -147,6 +147,45 @@ service CompassService { rpc ListNamespaces(ListNamespacesRequest) returns (ListNamespacesResponse) { } + + // Domain: Entity (v2) + rpc GetAllEntities(GetAllEntitiesRequest) returns (GetAllEntitiesResponse) { + } + + rpc GetEntityByID(GetEntityByIDRequest) returns (GetEntityByIDResponse) { + } + + rpc UpsertEntity(UpsertEntityRequest) returns (UpsertEntityResponse) { + } + + rpc DeleteEntity(DeleteEntityRequest) returns (DeleteEntityResponse) { + } + + rpc SearchEntities(SearchEntitiesRequest) returns (SearchEntitiesResponse) { + } + + rpc SuggestEntities(SuggestEntitiesRequest) returns (SuggestEntitiesResponse) { + } + + rpc GetEntityTypes(GetEntityTypesRequest) returns (GetEntityTypesResponse) { + } + + // Domain: Entity Context & Impact (v2) + rpc GetEntityContext(GetEntityContextRequest) returns (GetEntityContextResponse) { + } + + rpc GetEntityImpact(GetEntityImpactRequest) returns (GetEntityImpactResponse) { + } + + // Domain: Edges (v2) + rpc UpsertEdge(UpsertEdgeRequest) returns (UpsertEdgeResponse) { + } + + rpc GetEdges(GetEdgesRequest) returns (GetEdgesResponse) { + } + + rpc DeleteEdge(DeleteEdgeRequest) returns (DeleteEdgeResponse) { + } } message GetAllDiscussionsRequest { @@ -833,3 +872,162 @@ message Namespace { string state = 3; google.protobuf.Struct metadata = 4; } + +// ============================================================ +// Entity v2 messages +// ============================================================ + +message Entity { + string id = 1; + string urn = 2; + string type = 3; + string name = 4; + string description = 5; + google.protobuf.Struct properties = 6; + string source = 7; + google.protobuf.Timestamp valid_from = 8; + google.protobuf.Timestamp valid_to = 9; + google.protobuf.Timestamp created_at = 10; + google.protobuf.Timestamp updated_at = 11; +} + +message Edge { + string id = 1; + string source_urn = 2; + string target_urn = 3; + string type = 4; + google.protobuf.Struct properties = 5; + string source = 6; + google.protobuf.Timestamp valid_from = 7; + google.protobuf.Timestamp valid_to = 8; + google.protobuf.Timestamp created_at = 9; +} + +// Entity CRUD + +message GetAllEntitiesRequest { + string types = 1; + string source = 2; + string q = 3; + uint32 size = 4 [(buf.validate.field).uint32 = { gte: 0 }]; + uint32 offset = 5 [(buf.validate.field).uint32 = { gte: 0 }]; +} + +message GetAllEntitiesResponse { + repeated Entity data = 1; + uint32 total = 2; +} + +message GetEntityByIDRequest { + string id = 1; +} + +message GetEntityByIDResponse { + Entity data = 1; +} + +message UpsertEntityRequest { + string urn = 1 [(buf.validate.field).string.min_len = 1]; + string type = 2 [(buf.validate.field).string.min_len = 1]; + string name = 3 [(buf.validate.field).string.min_len = 1]; + string description = 4; + google.protobuf.Struct properties = 5; + string source = 6; + repeated string upstreams = 7; + repeated string downstreams = 8; +} + +message UpsertEntityResponse { + string id = 1; +} + +message DeleteEntityRequest { + string urn = 1 [(buf.validate.field).string.min_len = 1]; +} + +message DeleteEntityResponse {} + +// Entity Search + +message SearchEntitiesRequest { + string text = 1; + string types = 2; + string source = 3; + string mode = 4; // keyword, semantic, hybrid + uint32 size = 5 [(buf.validate.field).uint32 = { gte: 0 }]; + uint32 offset = 6 [(buf.validate.field).uint32 = { gte: 0 }]; +} + +message SearchEntitiesResponse { + repeated Entity data = 1; +} + +message SuggestEntitiesRequest { + string text = 1; +} + +message SuggestEntitiesResponse { + repeated string data = 1; +} + +message GetEntityTypesRequest {} + +message GetEntityTypesResponse { + repeated Type data = 1; +} + +// Context & Impact + +message GetEntityContextRequest { + string urn = 1 [(buf.validate.field).string.min_len = 1]; + uint32 depth = 2; +} + +message GetEntityContextResponse { + Entity entity = 1; + repeated Edge edges = 2; + repeated Entity related = 3; +} + +message GetEntityImpactRequest { + string urn = 1 [(buf.validate.field).string.min_len = 1]; + uint32 depth = 2; +} + +message GetEntityImpactResponse { + repeated Edge edges = 1; + repeated Entity affected = 2; +} + +// Edge CRUD + +message UpsertEdgeRequest { + string source_urn = 1 [(buf.validate.field).string.min_len = 1]; + string target_urn = 2 [(buf.validate.field).string.min_len = 1]; + string type = 3 [(buf.validate.field).string.min_len = 1]; + google.protobuf.Struct properties = 4; + string source = 5; +} + +message UpsertEdgeResponse { + string id = 1; +} + +message GetEdgesRequest { + string urn = 1 [(buf.validate.field).string.min_len = 1]; + string direction = 2; // outgoing, incoming, both (default: both) + string type = 3; // filter by edge type + bool current_only = 4; // only current edges (valid_to IS NULL) +} + +message GetEdgesResponse { + repeated Edge data = 1; +} + +message DeleteEdgeRequest { + string source_urn = 1 [(buf.validate.field).string.min_len = 1]; + string target_urn = 2 [(buf.validate.field).string.min_len = 1]; + string type = 3 [(buf.validate.field).string.min_len = 1]; +} + +message DeleteEdgeResponse {} From ee9c0c88eccb79f17cf07de564bdcb26644c47ee Mon Sep 17 00:00:00 2001 From: Ravi Suhag Date: Sun, 29 Mar 2026 01:39:17 -0500 Subject: [PATCH 2/2] feat(compass): rewrite proto for v2 entity system Removed all deprecated RPCs and messages: - Discussions (GetAllDiscussions, CreateDiscussion, etc.) - Comments (CreateComment, GetAllComments, etc.) - Tags (CreateTagAsset, GetTagByAssetAndTemplate, etc.) - Tag Templates (CreateTagTemplate, GetTagTemplate, etc.) - Asset CRUD (SearchAssets, UpsertAsset, GetAssetByID, etc.) - Asset lineage (GetGraph) - Asset probes (CreateAssetProbe) - Asset version history Retained and updated: - Entity CRUD: GetAllEntities, GetEntityByID, UpsertEntity, DeleteEntity - Entity Search: SearchEntities, SuggestEntities, GetEntityTypes - Entity Context: GetEntityContext, GetEntityImpact - Edge CRUD: UpsertEdge, GetEdges, DeleteEdge - Star (updated for entities): StarEntity, UnstarEntity, etc. - Namespace: CreateNamespace, GetNamespace, UpdateNamespace, ListNamespaces --- raystack/compass/v1beta1/service.proto | 1001 ++++-------------------- 1 file changed, 147 insertions(+), 854 deletions(-) diff --git a/raystack/compass/v1beta1/service.proto b/raystack/compass/v1beta1/service.proto index 60fb0ab6..cd05f991 100644 --- a/raystack/compass/v1beta1/service.proto +++ b/raystack/compass/v1beta1/service.proto @@ -4,7 +4,6 @@ package raystack.compass.v1beta1; import "google/protobuf/struct.proto"; import "google/protobuf/timestamp.proto"; -import "google/protobuf/wrappers.proto"; import "buf/validate/validate.proto"; option go_package = "github.com/raystack/proton/compass/v1beta1;compassv1beta1"; @@ -12,730 +11,43 @@ option java_multiple_files = true; option java_outer_classname = "CompassServiceProto"; option java_package = "io.raystack.proton.compass"; -// WARNING: This is still in active development and can have breaking changes service CompassService { - // Domain: Discussion - rpc GetAllDiscussions(GetAllDiscussionsRequest) returns (GetAllDiscussionsResponse) { - } - - rpc CreateDiscussion(CreateDiscussionRequest) returns (CreateDiscussionResponse) { - } - - rpc GetDiscussion(GetDiscussionRequest) returns (GetDiscussionResponse) { - } - - rpc PatchDiscussion(PatchDiscussionRequest) returns (PatchDiscussionResponse) { - } - - rpc CreateComment(CreateCommentRequest) returns (CreateCommentResponse) { - } - - rpc GetAllComments(GetAllCommentsRequest) returns (GetAllCommentsResponse) { - } - - rpc GetComment(GetCommentRequest) returns (GetCommentResponse) { - } - - rpc UpdateComment(UpdateCommentRequest) returns (UpdateCommentResponse) { - } - - rpc DeleteComment(DeleteCommentRequest) returns (DeleteCommentResponse) { - } - - // Domain: Asset - rpc SearchAssets(SearchAssetsRequest) returns (SearchAssetsResponse) { - } - - rpc SuggestAssets(SuggestAssetsRequest) returns (SuggestAssetsResponse) { - } - - rpc GroupAssets(GroupAssetsRequest) returns (GroupAssetsResponse) { - } - - rpc GetGraph(GetGraphRequest) returns (GetGraphResponse) { - } - - rpc GetAllTypes(GetAllTypesRequest) returns (GetAllTypesResponse) { - } - - rpc GetAllAssets(GetAllAssetsRequest) returns (GetAllAssetsResponse) { - } - - rpc GetAssetByID(GetAssetByIDRequest) returns (GetAssetByIDResponse) { - } - - rpc UpsertAsset(UpsertAssetRequest) returns (UpsertAssetResponse) { - } - - rpc UpsertPatchAsset(UpsertPatchAssetRequest) returns (UpsertPatchAssetResponse) { - } - - rpc DeleteAsset(DeleteAssetRequest) returns (DeleteAssetResponse) { - } - - rpc GetAssetStargazers(GetAssetStargazersRequest) returns (GetAssetStargazersResponse) { - } - - rpc GetAssetVersionHistory(GetAssetVersionHistoryRequest) returns (GetAssetVersionHistoryResponse) { - } - - rpc GetAssetByVersion(GetAssetByVersionRequest) returns (GetAssetByVersionResponse) { - } - - rpc CreateAssetProbe(CreateAssetProbeRequest) returns (CreateAssetProbeResponse) { - } - - // Domain: User * Star - rpc GetUserStarredAssets(GetUserStarredAssetsRequest) returns (GetUserStarredAssetsResponse) { - } - - rpc GetMyStarredAssets(GetMyStarredAssetsRequest) returns (GetMyStarredAssetsResponse) { - } - - rpc GetMyStarredAsset(GetMyStarredAssetRequest) returns (GetMyStarredAssetResponse) { - } - - rpc StarAsset(StarAssetRequest) returns (StarAssetResponse) { - } - - rpc UnstarAsset(UnstarAssetRequest) returns (UnstarAssetResponse) { - } - - rpc GetMyDiscussions(GetMyDiscussionsRequest) returns (GetMyDiscussionsResponse) { - } - - // Domain: Tag Templates - rpc CreateTagAsset(CreateTagAssetRequest) returns (CreateTagAssetResponse) { - } - - rpc GetTagByAssetAndTemplate(GetTagByAssetAndTemplateRequest) returns (GetTagByAssetAndTemplateResponse) { - } - - rpc UpdateTagAsset(UpdateTagAssetRequest) returns (UpdateTagAssetResponse) { - } - - rpc DeleteTagAsset(DeleteTagAssetRequest) returns (DeleteTagAssetResponse) { - } - - rpc GetAllTagsByAsset(GetAllTagsByAssetRequest) returns (GetAllTagsByAssetResponse) { - } - - rpc GetAllTagTemplates(GetAllTagTemplatesRequest) returns (GetAllTagTemplatesResponse) { - } - - rpc CreateTagTemplate(CreateTagTemplateRequest) returns (CreateTagTemplateResponse) { - } - - rpc GetTagTemplate(GetTagTemplateRequest) returns (GetTagTemplateResponse) { - } - - rpc UpdateTagTemplate(UpdateTagTemplateRequest) returns (UpdateTagTemplateResponse) { - } - - rpc DeleteTagTemplate(DeleteTagTemplateRequest) returns (DeleteTagTemplateResponse) { - } + // Domain: Entity + rpc GetAllEntities(GetAllEntitiesRequest) returns (GetAllEntitiesResponse) {} + rpc GetEntityByID(GetEntityByIDRequest) returns (GetEntityByIDResponse) {} + rpc UpsertEntity(UpsertEntityRequest) returns (UpsertEntityResponse) {} + rpc DeleteEntity(DeleteEntityRequest) returns (DeleteEntityResponse) {} + rpc SearchEntities(SearchEntitiesRequest) returns (SearchEntitiesResponse) {} + rpc SuggestEntities(SuggestEntitiesRequest) returns (SuggestEntitiesResponse) {} + rpc GetEntityTypes(GetEntityTypesRequest) returns (GetEntityTypesResponse) {} + + // Domain: Entity Context & Impact + rpc GetEntityContext(GetEntityContextRequest) returns (GetEntityContextResponse) {} + rpc GetEntityImpact(GetEntityImpactRequest) returns (GetEntityImpactResponse) {} + + // Domain: Edge + rpc UpsertEdge(UpsertEdgeRequest) returns (UpsertEdgeResponse) {} + rpc GetEdges(GetEdgesRequest) returns (GetEdgesResponse) {} + rpc DeleteEdge(DeleteEdgeRequest) returns (DeleteEdgeResponse) {} + + // Domain: Star + rpc StarEntity(StarEntityRequest) returns (StarEntityResponse) {} + rpc UnstarEntity(UnstarEntityRequest) returns (UnstarEntityResponse) {} + rpc GetUserStarredEntities(GetUserStarredEntitiesRequest) returns (GetUserStarredEntitiesResponse) {} + rpc GetMyStarredEntities(GetMyStarredEntitiesRequest) returns (GetMyStarredEntitiesResponse) {} + rpc GetMyStarredEntity(GetMyStarredEntityRequest) returns (GetMyStarredEntityResponse) {} + rpc GetEntityStargazers(GetEntityStargazersRequest) returns (GetEntityStargazersResponse) {} // Domain: Namespace - rpc CreateNamespace(CreateNamespaceRequest) returns (CreateNamespaceResponse) { - } - - rpc GetNamespace(GetNamespaceRequest) returns (GetNamespaceResponse) { - } - - rpc UpdateNamespace(UpdateNamespaceRequest) returns (UpdateNamespaceResponse) { - } - - rpc ListNamespaces(ListNamespacesRequest) returns (ListNamespacesResponse) { - } - - // Domain: Entity (v2) - rpc GetAllEntities(GetAllEntitiesRequest) returns (GetAllEntitiesResponse) { - } - - rpc GetEntityByID(GetEntityByIDRequest) returns (GetEntityByIDResponse) { - } - - rpc UpsertEntity(UpsertEntityRequest) returns (UpsertEntityResponse) { - } - - rpc DeleteEntity(DeleteEntityRequest) returns (DeleteEntityResponse) { - } - - rpc SearchEntities(SearchEntitiesRequest) returns (SearchEntitiesResponse) { - } - - rpc SuggestEntities(SuggestEntitiesRequest) returns (SuggestEntitiesResponse) { - } - - rpc GetEntityTypes(GetEntityTypesRequest) returns (GetEntityTypesResponse) { - } - - // Domain: Entity Context & Impact (v2) - rpc GetEntityContext(GetEntityContextRequest) returns (GetEntityContextResponse) { - } - - rpc GetEntityImpact(GetEntityImpactRequest) returns (GetEntityImpactResponse) { - } - - // Domain: Edges (v2) - rpc UpsertEdge(UpsertEdgeRequest) returns (UpsertEdgeResponse) { - } - - rpc GetEdges(GetEdgesRequest) returns (GetEdgesResponse) { - } - - rpc DeleteEdge(DeleteEdgeRequest) returns (DeleteEdgeResponse) { - } -} - -message GetAllDiscussionsRequest { - string type = 1; - string state = 2; - string owner = 3; - string assignee = 4; - string asset = 5; - string labels = 6; - string sort = 7; - string direction = 8; - uint32 size = 9 [(buf.validate.field).uint32 = { - gte: 0, - }]; - uint32 offset = 10 [(buf.validate.field).uint32 = { - gte: 0, - }]; -} - -message GetAllDiscussionsResponse { - repeated Discussion data = 1; -} - -message CreateDiscussionRequest { - string title = 2 [(buf.validate.field).string.min_len = 1]; - string body = 3 [(buf.validate.field).string.min_len = 1]; - string type = 4; - string state = 5; - repeated string labels = 6 [(buf.validate.field).repeated = { - unique: true, - }]; - repeated string assets = 7 [(buf.validate.field).repeated = { - unique: true, - }]; - repeated string assignees = 8 [(buf.validate.field).repeated = { - unique: true, - }]; -} - -message CreateDiscussionResponse { - string id = 1; -} - -message GetDiscussionRequest { - string id = 1; -} - -message GetDiscussionResponse { - Discussion data = 1; -} - -message PatchDiscussionRequest { - string id = 1; - string title = 2; - string body = 3; - string type = 4; - string state = 5; - repeated string labels = 6 [(buf.validate.field).repeated = { - unique: true, - }]; - repeated string assets = 7 [(buf.validate.field).repeated = { - unique: true, - }]; - repeated string assignees = 8 [(buf.validate.field).repeated = { - unique: true, - }]; -} - -message CreateCommentRequest { - string discussion_id = 1; - string body = 2 [(buf.validate.field).string.min_len = 1]; -} - -message PatchDiscussionResponse {} - -message CreateCommentResponse { - string id = 1; -} - -message GetAllCommentsRequest { - string discussion_id = 1; - string sort = 2; - string direction = 3; - uint32 size = 4 [(buf.validate.field).uint32 = { - gte: 0, - }]; - uint32 offset = 5 [(buf.validate.field).uint32 = { - gte: 0, - }]; -} - -message GetAllCommentsResponse { - repeated Comment data = 1; -} - -message GetCommentRequest { - string discussion_id = 1; - string id = 2; -} - -message GetCommentResponse { - Comment data = 1; -} - -message UpdateCommentRequest { - string discussion_id = 1; - string id = 2; - string body = 3 [(buf.validate.field).string.min_len = 1]; -} - -message UpdateCommentResponse {} - -message DeleteCommentRequest { - string discussion_id = 1; - string id = 2; -} - -message DeleteCommentResponse {} - -message SearchAssetsRequest { - string text = 1; - string rankby = 2; - uint32 size = 3 [(buf.validate.field).uint32 = { gte: 0 }]; - map filter = 4; - map query = 5; - - repeated string include_fields = 6 [(buf.validate.field).repeated = { - unique: true, - }]; - - uint32 offset = 7 [(buf.validate.field).uint32 = { gte: 0 }]; - - SearchFlags flags = 8; -} - -message SearchFlags { - bool is_column_search = 1; - bool disable_fuzzy = 2; - bool enable_highlight = 3; -} - -message SearchAssetsResponse { - repeated Asset data = 1; -} - -message SuggestAssetsRequest { - string text = 1; -} - -message SuggestAssetsResponse { - repeated string data = 1; -} - -message GroupAssetsRequest { - repeated string groupby = 1 [(buf.validate.field).repeated = {min_items: 1}]; - map filter = 2; - repeated string include_fields = 3; - uint32 size = 4 [(buf.validate.field).uint32 = { gte: 0 }]; -} - -message GroupAssetsResponse { - repeated AssetGroup asset_groups = 1; -} - -message AssetGroup { - repeated GroupField group_fields = 1; - repeated Asset assets = 2; -} - -message GroupField { - string group_key = 1; - string group_value = 2; -} - -message GetGraphRequest { - string urn = 1; - uint32 level = 2; - string direction = 3 [(buf.validate.field).string = { - in: [ - "upstream", - "downstream", - "" - ] - }]; - optional bool with_attributes = 4; - bool include_deleted = 5; -} - -message GetGraphResponse { - message ProbesInfo { - Probe latest = 1; - } - - message NodeAttributes { - ProbesInfo probes = 1; - } - - // Edges in the graph. - repeated LineageEdge data = 1; - // Key is the asset URN. Node attributes, if present, will be returned for - // source and target nodes in the LineageEdge. - map node_attrs = 2; -} - -message GetAllTypesRequest { - string q = 1; - string q_fields = 2; - string types = 3; - string services = 4; - map data = 5; -} - -message GetAllTypesResponse { - repeated Type data = 1; -} - -message GetAllAssetsRequest { - string q = 1; - string q_fields = 2; - string types = 3; - string services = 4; - string sort = 5; - string direction = 6; - map data = 7; - uint32 size = 8 [(buf.validate.field).uint32 = { gte: 0 }]; - uint32 offset = 9 [(buf.validate.field).uint32 = { gte: 0 }]; - bool with_total = 10; - bool is_deleted = 11; + rpc CreateNamespace(CreateNamespaceRequest) returns (CreateNamespaceResponse) {} + rpc GetNamespace(GetNamespaceRequest) returns (GetNamespaceResponse) {} + rpc UpdateNamespace(UpdateNamespaceRequest) returns (UpdateNamespaceResponse) {} + rpc ListNamespaces(ListNamespacesRequest) returns (ListNamespacesResponse) {} } -message GetAllAssetsResponse { - repeated Asset data = 1; - uint32 total = 2; -} - -message GetAssetByIDRequest { - string id = 1; -} - -message GetAssetByIDResponse { - Asset data = 1; -} - -message UpsertAssetRequest { - message Asset { - string urn = 1; - string type = 2; - string name = 3; - string service = 4; - string description = 5; - google.protobuf.Struct data = 6; - map labels = 7; - repeated User owners = 8; - string url = 9; - } - Asset asset = 1; - repeated LineageNode upstreams = 2; - repeated LineageNode downstreams = 3; - bool update_only = 4; -} - -message UpsertAssetResponse { - string id = 1; -} - -message UpsertPatchAssetRequest { - message Asset { - string urn = 1; - string type = 2; - google.protobuf.StringValue name = 3; - string service = 4; - google.protobuf.StringValue description = 5; - google.protobuf.Struct data = 6; - map labels = 7; - repeated User owners = 8; - string url = 9; - } - Asset asset = 1; - repeated LineageNode upstreams = 2; - repeated LineageNode downstreams = 3; - - // overwrite_lineage determines whether the asset's lineage should be - // overwritten with the upstreams and downstreams specified in the request. - // Currently, it is only applicable when both upstreams and downstreams are - // empty/not specified. - bool overwrite_lineage = 4; - bool update_only = 5; -} - -message UpsertPatchAssetResponse { - string id = 1; -} - -message DeleteAssetRequest { - string id = 1; -} - -message DeleteAssetResponse {} - -message GetAssetStargazersRequest { - string id = 1; - uint32 size = 2 [(buf.validate.field).uint32 = { - gte: 0, - }]; - uint32 offset = 3 [(buf.validate.field).uint32 = { - gte: 0, - }]; -} - -message GetAssetStargazersResponse { - repeated User data = 1; -} - -message GetAssetVersionHistoryRequest { - string id = 1; - uint32 size = 2 [(buf.validate.field).uint32 = { - gte: 0, - }]; - uint32 offset = 3 [(buf.validate.field).uint32 = { - gte: 0, - }]; -} - -message GetAssetVersionHistoryResponse { - repeated Asset data = 1; -} - -message GetAssetByVersionRequest { - string id = 1; - string version = 2; -} - -message GetAssetByVersionResponse { - Asset data = 1; -} - -message CreateAssetProbeRequest { - message Probe { - string status = 1 [(buf.validate.field).string = {min_len: 1}]; - string status_reason = 2; - google.protobuf.Struct metadata = 3; - google.protobuf.Timestamp timestamp = 4; - string id = 5; - } - string asset_urn = 1 [(buf.validate.field).string = {min_len: 1}]; - Probe probe = 2; -} - -message CreateAssetProbeResponse { - string id = 1; -} - -message GetUserStarredAssetsRequest { - string user_id = 1; - uint32 size = 2 [(buf.validate.field).uint32 = { - gte: 0, - }]; - uint32 offset = 3 [(buf.validate.field).uint32 = { - gte: 0, - }]; -} - -message GetUserStarredAssetsResponse { - repeated Asset data = 1; -} - -message GetMyStarredAssetsRequest { - uint32 size = 1 [(buf.validate.field).uint32 = { - gte: 0, - }]; - uint32 offset = 2 [(buf.validate.field).uint32 = { - gte: 0, - }]; -} - -message GetMyStarredAssetsResponse { - repeated Asset data = 1; -} - -message GetMyStarredAssetRequest { - string asset_id = 1; -} - -message GetMyStarredAssetResponse { - Asset data = 1; -} - -message StarAssetRequest { - string asset_id = 1; -} - -message StarAssetResponse { - string id = 1; -} - -message UnstarAssetRequest { - string asset_id = 1; -} - -message UnstarAssetResponse {} - -message GetMyDiscussionsRequest { - string filter = 1; - string type = 2; - string state = 3; - string asset = 4; - string labels = 5; - string sort = 6; - string direction = 7; - uint32 size = 8 [(buf.validate.field).uint32 = { - gte: 0, - }]; - uint32 offset = 9 [(buf.validate.field).uint32 = { - gte: 0, - }]; -} - -message GetMyDiscussionsResponse { - repeated Discussion data = 1; -} - -message CreateTagAssetRequest { - string asset_id = 1; // required - string template_urn = 2; // required - repeated TagValue tag_values = 3; // required - string template_display_name = 4; - string template_description = 5; -} - -message CreateTagAssetResponse { - Tag data = 1; -} - -message GetTagByAssetAndTemplateRequest { - string asset_id = 1; - string template_urn = 3; -} - -message GetTagByAssetAndTemplateResponse { - Tag data = 1; -} - -message UpdateTagAssetRequest { - string asset_id = 1; // required - string template_urn = 2; - repeated TagValue tag_values = 3; // required - string template_display_name = 4; - string template_description = 5; -} - -message UpdateTagAssetResponse { - Tag data = 1; -} - -message DeleteTagAssetRequest { - string asset_id = 1; - string template_urn = 2; -} - -message DeleteTagAssetResponse {} - -message GetAllTagsByAssetRequest { - string asset_id = 1; -} - -message GetAllTagsByAssetResponse { - repeated Tag data = 1; -} - -message GetAllTagTemplatesRequest { - string urn = 1; -} - -message GetAllTagTemplatesResponse { - repeated TagTemplate data = 1; -} - -message CreateTagTemplateRequest { - string urn = 1; // required - string display_name = 2; // required - string description = 3; // required - repeated TagTemplateField fields = 4; // required -} - -message CreateTagTemplateResponse { - TagTemplate data = 1; -} - -message GetTagTemplateRequest { - string template_urn = 1; -} - -message GetTagTemplateResponse { - TagTemplate data = 1; -} - -message UpdateTagTemplateRequest { - string template_urn = 1; - string display_name = 2; // required - string description = 3; // required - repeated TagTemplateField fields = 4; // required -} - -message UpdateTagTemplateResponse { - TagTemplate data = 1; -} - -message DeleteTagTemplateRequest { - string template_urn = 1; -} - -message DeleteTagTemplateResponse {} - -message CreateNamespaceRequest { - string id = 1; - string name = 2 [(buf.validate.field).string.min_len = 3]; - string state = 3; - google.protobuf.Struct metadata = 4; -} - -message CreateNamespaceResponse { - string id = 1; -} - -message GetNamespaceRequest { - // set either id or name - string urn = 1; -} - -message GetNamespaceResponse { - Namespace namespace = 1; -} - -message UpdateNamespaceRequest { - // set either id or name - string urn = 1; - - string state = 2; - google.protobuf.Struct metadata = 3; -} - -message UpdateNamespaceResponse {} - -message ListNamespacesRequest {} - -message ListNamespacesResponse { - repeated Namespace namespaces = 1; -} - -// Entities +// ============================================================ +// Core messages +// ============================================================ message User { string id = 1; @@ -746,137 +58,6 @@ message User { google.protobuf.Timestamp updated_at = 6; } -message Change { - string type = 1; - repeated string path = 2; - google.protobuf.Value from = 3; - google.protobuf.Value to = 4; -} - -message Asset { - string id = 1; - string urn = 2; - string type = 3; - string service = 4; - string name = 5; - string description = 6; - google.protobuf.Struct data = 7; - map labels = 8; - repeated User owners = 9; - string version = 10; - User updated_by = 11; - repeated Change changelog = 12; - google.protobuf.Timestamp created_at = 13; - google.protobuf.Timestamp updated_at = 14; - string url = 15; - repeated Probe probes = 16; - bool is_deleted = 17; -} - -message Probe { - string id = 1; - string asset_urn = 2; - string status = 3; - string status_reason = 4; - google.protobuf.Struct metadata = 5; - google.protobuf.Timestamp timestamp = 6; - google.protobuf.Timestamp created_at = 7; -} - -message Discussion { - string id = 1; - string title = 2; - string body = 3; - string type = 4; - string state = 5; - repeated string labels = 6; - repeated string assets = 7; - repeated string assignees = 8; - User owner = 9; - google.protobuf.Timestamp created_at = 10; - google.protobuf.Timestamp updated_at = 11; -} - -message Comment { - string id = 1; - string discussion_id = 2; - string body = 3; - User owner = 4; - User updated_by = 5; - google.protobuf.Timestamp created_at = 6; - google.protobuf.Timestamp updated_at = 7; -} - -message LineageEdge { - string source = 1; - string target = 2; - google.protobuf.Struct prop = 3; -} - -message LineageNode { - string urn = 1; - string type = 2 [deprecated = true]; - string service = 3 [deprecated = true]; -} - -message Tag { - string asset_id = 1; - string template_urn = 2; - repeated TagValue tag_values = 3; - string template_display_name = 4; - string template_description = 5; -} - -message TagValue { - uint32 field_id = 1; - google.protobuf.Value field_value = 2; - string field_urn = 3; - string field_display_name = 4; - string field_description = 5; - string field_data_type = 6; - repeated string field_options = 7; - bool field_required = 8; - google.protobuf.Timestamp created_at = 9; - google.protobuf.Timestamp updated_at = 10; -} - -message TagTemplate { - string urn = 1; - string display_name = 2; - string description = 3; - repeated TagTemplateField fields = 4; - google.protobuf.Timestamp created_at = 5; - google.protobuf.Timestamp updated_at = 6; -} - -message TagTemplateField { - uint32 id = 1; - string urn = 2; - string display_name = 3; - string description = 4; - string data_type = 5; - repeated string options = 6; - bool required = 7; - google.protobuf.Timestamp created_at = 8; - google.protobuf.Timestamp updated_at = 9; -} - -message Type { - string name = 1; - uint32 count = 2; -} - -message Namespace { - string id = 1; - string name = 2 [(buf.validate.field).string.min_len = 3]; - string state = 3; - google.protobuf.Struct metadata = 4; -} - -// ============================================================ -// Entity v2 messages -// ============================================================ - message Entity { string id = 1; string urn = 2; @@ -903,7 +84,21 @@ message Edge { google.protobuf.Timestamp created_at = 9; } +message Type { + string name = 1; + uint32 count = 2; +} + +message Namespace { + string id = 1; + string name = 2 [(buf.validate.field).string.min_len = 3]; + string state = 3; + google.protobuf.Struct metadata = 4; +} + +// ============================================================ // Entity CRUD +// ============================================================ message GetAllEntitiesRequest { string types = 1; @@ -947,7 +142,9 @@ message DeleteEntityRequest { message DeleteEntityResponse {} +// ============================================================ // Entity Search +// ============================================================ message SearchEntitiesRequest { string text = 1; @@ -976,7 +173,9 @@ message GetEntityTypesResponse { repeated Type data = 1; } +// ============================================================ // Context & Impact +// ============================================================ message GetEntityContextRequest { string urn = 1 [(buf.validate.field).string.min_len = 1]; @@ -999,7 +198,9 @@ message GetEntityImpactResponse { repeated Entity affected = 2; } +// ============================================================ // Edge CRUD +// ============================================================ message UpsertEdgeRequest { string source_urn = 1 [(buf.validate.field).string.min_len = 1]; @@ -1015,9 +216,9 @@ message UpsertEdgeResponse { message GetEdgesRequest { string urn = 1 [(buf.validate.field).string.min_len = 1]; - string direction = 2; // outgoing, incoming, both (default: both) - string type = 3; // filter by edge type - bool current_only = 4; // only current edges (valid_to IS NULL) + string direction = 2; // outgoing, incoming, both + string type = 3; + bool current_only = 4; } message GetEdgesResponse { @@ -1031,3 +232,95 @@ message DeleteEdgeRequest { } message DeleteEdgeResponse {} + +// ============================================================ +// Star +// ============================================================ + +message StarEntityRequest { + string entity_id = 1; +} + +message StarEntityResponse { + string id = 1; +} + +message UnstarEntityRequest { + string entity_id = 1; +} + +message UnstarEntityResponse {} + +message GetUserStarredEntitiesRequest { + string user_id = 1; + uint32 size = 2 [(buf.validate.field).uint32 = { gte: 0 }]; + uint32 offset = 3 [(buf.validate.field).uint32 = { gte: 0 }]; +} + +message GetUserStarredEntitiesResponse { + repeated Entity data = 1; +} + +message GetMyStarredEntitiesRequest { + uint32 size = 1 [(buf.validate.field).uint32 = { gte: 0 }]; + uint32 offset = 2 [(buf.validate.field).uint32 = { gte: 0 }]; +} + +message GetMyStarredEntitiesResponse { + repeated Entity data = 1; +} + +message GetMyStarredEntityRequest { + string entity_id = 1; +} + +message GetMyStarredEntityResponse { + Entity data = 1; +} + +message GetEntityStargazersRequest { + string id = 1; + uint32 size = 2 [(buf.validate.field).uint32 = { gte: 0 }]; + uint32 offset = 3 [(buf.validate.field).uint32 = { gte: 0 }]; +} + +message GetEntityStargazersResponse { + repeated User data = 1; +} + +// ============================================================ +// Namespace +// ============================================================ + +message CreateNamespaceRequest { + string id = 1; + string name = 2 [(buf.validate.field).string.min_len = 3]; + string state = 3; + google.protobuf.Struct metadata = 4; +} + +message CreateNamespaceResponse { + string id = 1; +} + +message GetNamespaceRequest { + string urn = 1; +} + +message GetNamespaceResponse { + Namespace namespace = 1; +} + +message UpdateNamespaceRequest { + string urn = 1; + string state = 2; + google.protobuf.Struct metadata = 3; +} + +message UpdateNamespaceResponse {} + +message ListNamespacesRequest {} + +message ListNamespacesResponse { + repeated Namespace namespaces = 1; +}