diff --git a/api/core/v1/record.pb.go b/api/core/v1/record.pb.go index 37ec822d0..f0ee2c818 100644 --- a/api/core/v1/record.pb.go +++ b/api/core/v1/record.pb.go @@ -281,7 +281,9 @@ type RecordReferrer struct { // Specs: https://www.rfc-editor.org/rfc/rfc3339.html CreatedAt string `protobuf:"bytes,4,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` // The actual data of the referrer. - Data *structpb.Struct `protobuf:"bytes,5,opt,name=data,proto3" json:"data,omitempty"` + Data *structpb.Struct `protobuf:"bytes,5,opt,name=data,proto3" json:"data,omitempty"` + // The CID of the referrer. + ReferrerRef *ReferrerRef `protobuf:"bytes,6,opt,name=referrer_ref,json=referrerRef,proto3" json:"referrer_ref,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -351,6 +353,13 @@ func (x *RecordReferrer) GetData() *structpb.Struct { return nil } +func (x *RecordReferrer) GetReferrerRef() *ReferrerRef { + if x != nil { + return x.ReferrerRef + } + return nil +} + var File_agntcy_dir_core_v1_record_proto protoreflect.FileDescriptor var file_agntcy_dir_core_v1_record_proto_rawDesc = string([]byte{ @@ -361,70 +370,77 @@ var file_agntcy_dir_core_v1_record_proto_rawDesc = string([]byte{ 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x62, 0x75, 0x66, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x22, 0x2c, 0x0a, 0x09, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x66, 0x12, 0x1f, 0x0a, - 0x03, 0x63, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0d, 0xba, 0x48, 0x0a, 0xc8, - 0x01, 0x01, 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x01, 0x52, 0x03, 0x63, 0x69, 0x64, 0x22, 0x50, - 0x0a, 0x0e, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x66, - 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x10, - 0x0a, 0x03, 0x63, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x63, 0x69, 0x64, - 0x22, 0xf7, 0x01, 0x0a, 0x0a, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x4d, 0x65, 0x74, 0x61, 0x12, - 0x10, 0x0a, 0x03, 0x63, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x63, 0x69, - 0x64, 0x12, 0x51, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x61, 0x67, 0x6e, 0x74, 0x63, 0x79, 0x2e, - 0x64, 0x69, 0x72, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x63, 0x6f, - 0x72, 0x64, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, 0x76, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x63, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x1a, 0x3e, 0x0a, 0x10, 0x41, 0x6e, - 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, - 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, - 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x35, 0x0a, 0x06, 0x52, 0x65, - 0x63, 0x6f, 0x72, 0x64, 0x12, 0x2b, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x04, 0x64, 0x61, 0x74, - 0x61, 0x22, 0x88, 0x03, 0x0a, 0x0e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x66, 0x65, - 0x72, 0x72, 0x65, 0x72, 0x12, 0x55, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x41, 0xba, 0x48, 0x3e, 0x72, 0x3c, 0x52, 0x1c, 0x61, 0x67, 0x6e, 0x74, 0x63, - 0x79, 0x2e, 0x64, 0x69, 0x72, 0x2e, 0x73, 0x69, 0x67, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x75, - 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x1c, 0x61, 0x67, 0x6e, 0x74, 0x63, 0x79, 0x2e, - 0x64, 0x69, 0x72, 0x2e, 0x73, 0x69, 0x67, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x3c, 0x0a, 0x0a, 0x72, - 0x65, 0x63, 0x6f, 0x72, 0x64, 0x5f, 0x72, 0x65, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1d, 0x2e, 0x61, 0x67, 0x6e, 0x74, 0x63, 0x79, 0x2e, 0x64, 0x69, 0x72, 0x2e, 0x63, 0x6f, 0x72, - 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x66, 0x52, 0x09, - 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x66, 0x12, 0x55, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, - 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x33, - 0x2e, 0x61, 0x67, 0x6e, 0x74, 0x63, 0x79, 0x2e, 0x64, 0x69, 0x72, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x66, 0x65, 0x72, 0x72, - 0x65, 0x72, 0x2e, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, - 0x2b, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x3e, 0x0a, 0x10, - 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, - 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0xb3, 0x01, 0x0a, - 0x16, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x67, 0x6e, 0x74, 0x63, 0x79, 0x2e, 0x64, 0x69, 0x72, 0x2e, - 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x42, 0x0b, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x50, - 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x21, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, - 0x6f, 0x6d, 0x2f, 0x61, 0x67, 0x6e, 0x74, 0x63, 0x79, 0x2f, 0x64, 0x69, 0x72, 0x2f, 0x61, 0x70, - 0x69, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x41, 0x44, 0x43, 0xaa, - 0x02, 0x12, 0x41, 0x67, 0x6e, 0x74, 0x63, 0x79, 0x2e, 0x44, 0x69, 0x72, 0x2e, 0x43, 0x6f, 0x72, - 0x65, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x12, 0x41, 0x67, 0x6e, 0x74, 0x63, 0x79, 0x5c, 0x44, 0x69, - 0x72, 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x1e, 0x41, 0x67, 0x6e, 0x74, - 0x63, 0x79, 0x5c, 0x44, 0x69, 0x72, 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x56, 0x31, 0x5c, 0x47, - 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x15, 0x41, 0x67, 0x6e, - 0x74, 0x63, 0x79, 0x3a, 0x3a, 0x44, 0x69, 0x72, 0x3a, 0x3a, 0x43, 0x6f, 0x72, 0x65, 0x3a, 0x3a, - 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x1a, 0x21, 0x61, 0x67, 0x6e, 0x74, 0x63, 0x79, 0x2f, 0x64, 0x69, 0x72, 0x2f, 0x63, 0x6f, 0x72, + 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x72, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x22, 0x2c, 0x0a, 0x09, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x66, + 0x12, 0x1f, 0x0a, 0x03, 0x63, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0d, 0xba, + 0x48, 0x0a, 0xc8, 0x01, 0x01, 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x01, 0x52, 0x03, 0x63, 0x69, + 0x64, 0x22, 0x50, 0x0a, 0x0e, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, + 0x52, 0x65, 0x66, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x63, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x63, 0x69, 0x64, 0x22, 0xf7, 0x01, 0x0a, 0x0a, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x4d, 0x65, + 0x74, 0x61, 0x12, 0x10, 0x0a, 0x03, 0x63, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x63, 0x69, 0x64, 0x12, 0x51, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x61, 0x67, 0x6e, 0x74, + 0x63, 0x79, 0x2e, 0x64, 0x69, 0x72, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, + 0x65, 0x63, 0x6f, 0x72, 0x64, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0d, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1d, + 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x1a, 0x3e, 0x0a, + 0x10, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x35, 0x0a, + 0x06, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x2b, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x04, + 0x64, 0x61, 0x74, 0x61, 0x22, 0xcc, 0x03, 0x0a, 0x0e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, + 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x72, 0x12, 0x55, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x41, 0xba, 0x48, 0x3e, 0x72, 0x3c, 0x52, 0x1c, 0x61, 0x67, + 0x6e, 0x74, 0x63, 0x79, 0x2e, 0x64, 0x69, 0x72, 0x2e, 0x73, 0x69, 0x67, 0x6e, 0x2e, 0x76, 0x31, + 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x1c, 0x61, 0x67, 0x6e, 0x74, + 0x63, 0x79, 0x2e, 0x64, 0x69, 0x72, 0x2e, 0x73, 0x69, 0x67, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, + 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x3c, + 0x0a, 0x0a, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x5f, 0x72, 0x65, 0x66, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x61, 0x67, 0x6e, 0x74, 0x63, 0x79, 0x2e, 0x64, 0x69, 0x72, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x65, + 0x66, 0x52, 0x09, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x66, 0x12, 0x55, 0x0a, 0x0b, + 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x33, 0x2e, 0x61, 0x67, 0x6e, 0x74, 0x63, 0x79, 0x2e, 0x64, 0x69, 0x72, 0x2e, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x66, + 0x65, 0x72, 0x72, 0x65, 0x72, 0x2e, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, + 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x41, 0x74, 0x12, 0x2b, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, + 0x42, 0x0a, 0x0c, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x72, 0x5f, 0x72, 0x65, 0x66, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x61, 0x67, 0x6e, 0x74, 0x63, 0x79, 0x2e, 0x64, + 0x69, 0x72, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x66, 0x65, 0x72, + 0x72, 0x65, 0x72, 0x52, 0x65, 0x66, 0x52, 0x0b, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x72, + 0x52, 0x65, 0x66, 0x1a, 0x3e, 0x0a, 0x10, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, + 0x02, 0x38, 0x01, 0x42, 0xb3, 0x01, 0x0a, 0x16, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x67, 0x6e, 0x74, + 0x63, 0x79, 0x2e, 0x64, 0x69, 0x72, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x42, 0x0b, + 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x21, 0x67, + 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x67, 0x6e, 0x74, 0x63, 0x79, + 0x2f, 0x64, 0x69, 0x72, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x76, 0x31, + 0xa2, 0x02, 0x03, 0x41, 0x44, 0x43, 0xaa, 0x02, 0x12, 0x41, 0x67, 0x6e, 0x74, 0x63, 0x79, 0x2e, + 0x44, 0x69, 0x72, 0x2e, 0x43, 0x6f, 0x72, 0x65, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x12, 0x41, 0x67, + 0x6e, 0x74, 0x63, 0x79, 0x5c, 0x44, 0x69, 0x72, 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x56, 0x31, + 0xe2, 0x02, 0x1e, 0x41, 0x67, 0x6e, 0x74, 0x63, 0x79, 0x5c, 0x44, 0x69, 0x72, 0x5c, 0x43, 0x6f, + 0x72, 0x65, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0xea, 0x02, 0x15, 0x41, 0x67, 0x6e, 0x74, 0x63, 0x79, 0x3a, 0x3a, 0x44, 0x69, 0x72, 0x3a, + 0x3a, 0x43, 0x6f, 0x72, 0x65, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x33, }) var ( @@ -449,6 +465,7 @@ var file_agntcy_dir_core_v1_record_proto_goTypes = []any{ nil, // 5: agntcy.dir.core.v1.RecordMeta.AnnotationsEntry nil, // 6: agntcy.dir.core.v1.RecordReferrer.AnnotationsEntry (*structpb.Struct)(nil), // 7: google.protobuf.Struct + (*ReferrerRef)(nil), // 8: agntcy.dir.core.v1.ReferrerRef } var file_agntcy_dir_core_v1_record_proto_depIdxs = []int32{ 5, // 0: agntcy.dir.core.v1.RecordMeta.annotations:type_name -> agntcy.dir.core.v1.RecordMeta.AnnotationsEntry @@ -456,11 +473,12 @@ var file_agntcy_dir_core_v1_record_proto_depIdxs = []int32{ 0, // 2: agntcy.dir.core.v1.RecordReferrer.record_ref:type_name -> agntcy.dir.core.v1.RecordRef 6, // 3: agntcy.dir.core.v1.RecordReferrer.annotations:type_name -> agntcy.dir.core.v1.RecordReferrer.AnnotationsEntry 7, // 4: agntcy.dir.core.v1.RecordReferrer.data:type_name -> google.protobuf.Struct - 5, // [5:5] is the sub-list for method output_type - 5, // [5:5] is the sub-list for method input_type - 5, // [5:5] is the sub-list for extension type_name - 5, // [5:5] is the sub-list for extension extendee - 0, // [0:5] is the sub-list for field type_name + 8, // 5: agntcy.dir.core.v1.RecordReferrer.referrer_ref:type_name -> agntcy.dir.core.v1.ReferrerRef + 6, // [6:6] is the sub-list for method output_type + 6, // [6:6] is the sub-list for method input_type + 6, // [6:6] is the sub-list for extension type_name + 6, // [6:6] is the sub-list for extension extendee + 0, // [0:6] is the sub-list for field type_name } func init() { file_agntcy_dir_core_v1_record_proto_init() } @@ -468,6 +486,7 @@ func file_agntcy_dir_core_v1_record_proto_init() { if File_agntcy_dir_core_v1_record_proto != nil { return } + file_agntcy_dir_core_v1_referrer_proto_init() type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ diff --git a/api/store/v1/store_service.pb.go b/api/store/v1/store_service.pb.go index 4f7d93576..fd2d49017 100644 --- a/api/store/v1/store_service.pb.go +++ b/api/store/v1/store_service.pb.go @@ -278,6 +278,116 @@ func (x *PullReferrerResponse) GetReferrer() *v1.RecordReferrer { return nil } +type DeleteReferrerRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + // The record the referrer(s) are referring to. + Record *v1.RecordRef `protobuf:"bytes,1,opt,name=record,proto3" json:"record,omitempty"` + // The CID of the referrer to delete. + // If set, delete the referrer by CID. + ReferrerRef *v1.ReferrerRef `protobuf:"bytes,2,opt,name=referrer_ref,json=referrerRef,proto3" json:"referrer_ref,omitempty"` + // The referrer type of the referrers to delete. + // If set, delete the referrers with given type. + ReferrerType *string `protobuf:"bytes,3,opt,name=referrer_type,json=referrerType,proto3,oneof" json:"referrer_type,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *DeleteReferrerRequest) Reset() { + *x = DeleteReferrerRequest{} + mi := &file_agntcy_dir_store_v1_store_service_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *DeleteReferrerRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeleteReferrerRequest) ProtoMessage() {} + +func (x *DeleteReferrerRequest) ProtoReflect() protoreflect.Message { + mi := &file_agntcy_dir_store_v1_store_service_proto_msgTypes[4] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DeleteReferrerRequest.ProtoReflect.Descriptor instead. +func (*DeleteReferrerRequest) Descriptor() ([]byte, []int) { + return file_agntcy_dir_store_v1_store_service_proto_rawDescGZIP(), []int{4} +} + +func (x *DeleteReferrerRequest) GetRecord() *v1.RecordRef { + if x != nil { + return x.Record + } + return nil +} + +func (x *DeleteReferrerRequest) GetReferrerRef() *v1.ReferrerRef { + if x != nil { + return x.ReferrerRef + } + return nil +} + +func (x *DeleteReferrerRequest) GetReferrerType() string { + if x != nil && x.ReferrerType != nil { + return *x.ReferrerType + } + return "" +} + +type DeleteReferrerResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + // The CID(s) of the deleted referrers. + ReferrerRefs []*v1.ReferrerRef `protobuf:"bytes,1,rep,name=referrer_refs,json=referrerRefs,proto3" json:"referrer_refs,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *DeleteReferrerResponse) Reset() { + *x = DeleteReferrerResponse{} + mi := &file_agntcy_dir_store_v1_store_service_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *DeleteReferrerResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeleteReferrerResponse) ProtoMessage() {} + +func (x *DeleteReferrerResponse) ProtoReflect() protoreflect.Message { + mi := &file_agntcy_dir_store_v1_store_service_proto_msgTypes[5] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DeleteReferrerResponse.ProtoReflect.Descriptor instead. +func (*DeleteReferrerResponse) Descriptor() ([]byte, []int) { + return file_agntcy_dir_store_v1_store_service_proto_rawDescGZIP(), []int{5} +} + +func (x *DeleteReferrerResponse) GetReferrerRefs() []*v1.ReferrerRef { + if x != nil { + return x.ReferrerRefs + } + return nil +} + var File_agntcy_dir_store_v1_store_service_proto protoreflect.FileDescriptor var file_agntcy_dir_store_v1_store_service_proto_rawDesc = string([]byte{ @@ -346,52 +456,78 @@ var file_agntcy_dir_store_v1_store_service_proto_rawDesc = string([]byte{ 0x72, 0x72, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x67, 0x6e, 0x74, 0x63, 0x79, 0x2e, 0x64, 0x69, 0x72, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x72, 0x52, 0x08, - 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x72, 0x32, 0xfe, 0x03, 0x0a, 0x0c, 0x53, 0x74, 0x6f, - 0x72, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x45, 0x0a, 0x04, 0x50, 0x75, 0x73, - 0x68, 0x12, 0x1a, 0x2e, 0x61, 0x67, 0x6e, 0x74, 0x63, 0x79, 0x2e, 0x64, 0x69, 0x72, 0x2e, 0x63, - 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x1a, 0x1d, 0x2e, - 0x61, 0x67, 0x6e, 0x74, 0x63, 0x79, 0x2e, 0x64, 0x69, 0x72, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, - 0x76, 0x31, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x66, 0x28, 0x01, 0x30, 0x01, - 0x12, 0x45, 0x0a, 0x04, 0x50, 0x75, 0x6c, 0x6c, 0x12, 0x1d, 0x2e, 0x61, 0x67, 0x6e, 0x74, 0x63, - 0x79, 0x2e, 0x64, 0x69, 0x72, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, - 0x63, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x66, 0x1a, 0x1a, 0x2e, 0x61, 0x67, 0x6e, 0x74, 0x63, 0x79, - 0x2e, 0x64, 0x69, 0x72, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x63, - 0x6f, 0x72, 0x64, 0x28, 0x01, 0x30, 0x01, 0x12, 0x4b, 0x0a, 0x06, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, - 0x70, 0x12, 0x1d, 0x2e, 0x61, 0x67, 0x6e, 0x74, 0x63, 0x79, 0x2e, 0x64, 0x69, 0x72, 0x2e, 0x63, + 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x72, 0x22, 0xd6, 0x01, 0x0a, 0x15, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x3d, 0x0a, 0x06, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x61, 0x67, 0x6e, 0x74, 0x63, 0x79, 0x2e, 0x64, 0x69, 0x72, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x65, + 0x66, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x06, 0x72, 0x65, 0x63, 0x6f, 0x72, + 0x64, 0x12, 0x42, 0x0a, 0x0c, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x72, 0x5f, 0x72, 0x65, + 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x61, 0x67, 0x6e, 0x74, 0x63, 0x79, + 0x2e, 0x64, 0x69, 0x72, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x66, + 0x65, 0x72, 0x72, 0x65, 0x72, 0x52, 0x65, 0x66, 0x52, 0x0b, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, + 0x65, 0x72, 0x52, 0x65, 0x66, 0x12, 0x28, 0x0a, 0x0d, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, + 0x72, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0c, + 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x88, 0x01, 0x01, 0x42, + 0x10, 0x0a, 0x0e, 0x5f, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x72, 0x5f, 0x74, 0x79, 0x70, + 0x65, 0x22, 0x5e, 0x0a, 0x16, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, + 0x72, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x44, 0x0a, 0x0d, 0x72, + 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x72, 0x5f, 0x72, 0x65, 0x66, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x61, 0x67, 0x6e, 0x74, 0x63, 0x79, 0x2e, 0x64, 0x69, 0x72, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x72, + 0x52, 0x65, 0x66, 0x52, 0x0c, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x72, 0x52, 0x65, 0x66, + 0x73, 0x32, 0xed, 0x04, 0x0a, 0x0c, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x12, 0x45, 0x0a, 0x04, 0x50, 0x75, 0x73, 0x68, 0x12, 0x1a, 0x2e, 0x61, 0x67, 0x6e, + 0x74, 0x63, 0x79, 0x2e, 0x64, 0x69, 0x72, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, + 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x1a, 0x1d, 0x2e, 0x61, 0x67, 0x6e, 0x74, 0x63, 0x79, 0x2e, + 0x64, 0x69, 0x72, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x63, 0x6f, + 0x72, 0x64, 0x52, 0x65, 0x66, 0x28, 0x01, 0x30, 0x01, 0x12, 0x45, 0x0a, 0x04, 0x50, 0x75, 0x6c, + 0x6c, 0x12, 0x1d, 0x2e, 0x61, 0x67, 0x6e, 0x74, 0x63, 0x79, 0x2e, 0x64, 0x69, 0x72, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x66, - 0x1a, 0x1e, 0x2e, 0x61, 0x67, 0x6e, 0x74, 0x63, 0x79, 0x2e, 0x64, 0x69, 0x72, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x4d, 0x65, 0x74, 0x61, - 0x28, 0x01, 0x30, 0x01, 0x12, 0x41, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x1d, - 0x2e, 0x61, 0x67, 0x6e, 0x74, 0x63, 0x79, 0x2e, 0x64, 0x69, 0x72, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x66, 0x1a, 0x16, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x28, 0x01, 0x12, 0x67, 0x0a, 0x0c, 0x50, 0x75, 0x73, 0x68, 0x52, - 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x72, 0x12, 0x28, 0x2e, 0x61, 0x67, 0x6e, 0x74, 0x63, 0x79, - 0x2e, 0x64, 0x69, 0x72, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x75, - 0x73, 0x68, 0x52, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x29, 0x2e, 0x61, 0x67, 0x6e, 0x74, 0x63, 0x79, 0x2e, 0x64, 0x69, 0x72, 0x2e, 0x73, - 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x75, 0x73, 0x68, 0x52, 0x65, 0x66, 0x65, - 0x72, 0x72, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, 0x01, - 0x12, 0x67, 0x0a, 0x0c, 0x50, 0x75, 0x6c, 0x6c, 0x52, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x72, + 0x1a, 0x1a, 0x2e, 0x61, 0x67, 0x6e, 0x74, 0x63, 0x79, 0x2e, 0x64, 0x69, 0x72, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x28, 0x01, 0x30, 0x01, + 0x12, 0x4b, 0x0a, 0x06, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x12, 0x1d, 0x2e, 0x61, 0x67, 0x6e, + 0x74, 0x63, 0x79, 0x2e, 0x64, 0x69, 0x72, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, + 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x66, 0x1a, 0x1e, 0x2e, 0x61, 0x67, 0x6e, 0x74, + 0x63, 0x79, 0x2e, 0x64, 0x69, 0x72, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, + 0x65, 0x63, 0x6f, 0x72, 0x64, 0x4d, 0x65, 0x74, 0x61, 0x28, 0x01, 0x30, 0x01, 0x12, 0x41, 0x0a, + 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x1d, 0x2e, 0x61, 0x67, 0x6e, 0x74, 0x63, 0x79, + 0x2e, 0x64, 0x69, 0x72, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x63, + 0x6f, 0x72, 0x64, 0x52, 0x65, 0x66, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x28, 0x01, + 0x12, 0x67, 0x0a, 0x0c, 0x50, 0x75, 0x73, 0x68, 0x52, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x72, 0x12, 0x28, 0x2e, 0x61, 0x67, 0x6e, 0x74, 0x63, 0x79, 0x2e, 0x64, 0x69, 0x72, 0x2e, 0x73, 0x74, - 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x75, 0x6c, 0x6c, 0x52, 0x65, 0x66, 0x65, 0x72, + 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x75, 0x73, 0x68, 0x52, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x61, 0x67, 0x6e, 0x74, 0x63, 0x79, 0x2e, 0x64, 0x69, 0x72, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, - 0x2e, 0x50, 0x75, 0x6c, 0x6c, 0x52, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x72, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, 0x01, 0x42, 0xbf, 0x01, 0x0a, 0x17, 0x63, 0x6f, - 0x6d, 0x2e, 0x61, 0x67, 0x6e, 0x74, 0x63, 0x79, 0x2e, 0x64, 0x69, 0x72, 0x2e, 0x73, 0x74, 0x6f, - 0x72, 0x65, 0x2e, 0x76, 0x31, 0x42, 0x11, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x22, 0x67, 0x69, 0x74, 0x68, - 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x67, 0x6e, 0x74, 0x63, 0x79, 0x2f, 0x64, 0x69, - 0x72, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2f, 0x76, 0x31, 0xa2, 0x02, - 0x03, 0x41, 0x44, 0x53, 0xaa, 0x02, 0x13, 0x41, 0x67, 0x6e, 0x74, 0x63, 0x79, 0x2e, 0x44, 0x69, - 0x72, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x13, 0x41, 0x67, 0x6e, - 0x74, 0x63, 0x79, 0x5c, 0x44, 0x69, 0x72, 0x5c, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x5c, 0x56, 0x31, - 0xe2, 0x02, 0x1f, 0x41, 0x67, 0x6e, 0x74, 0x63, 0x79, 0x5c, 0x44, 0x69, 0x72, 0x5c, 0x53, 0x74, - 0x6f, 0x72, 0x65, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0xea, 0x02, 0x16, 0x41, 0x67, 0x6e, 0x74, 0x63, 0x79, 0x3a, 0x3a, 0x44, 0x69, 0x72, - 0x3a, 0x3a, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x33, + 0x2e, 0x50, 0x75, 0x73, 0x68, 0x52, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x72, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, 0x01, 0x12, 0x67, 0x0a, 0x0c, 0x50, 0x75, 0x6c, + 0x6c, 0x52, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x72, 0x12, 0x28, 0x2e, 0x61, 0x67, 0x6e, 0x74, + 0x63, 0x79, 0x2e, 0x64, 0x69, 0x72, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, + 0x50, 0x75, 0x6c, 0x6c, 0x52, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x61, 0x67, 0x6e, 0x74, 0x63, 0x79, 0x2e, 0x64, 0x69, 0x72, + 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x75, 0x6c, 0x6c, 0x52, 0x65, + 0x66, 0x65, 0x72, 0x72, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, + 0x30, 0x01, 0x12, 0x6d, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x66, 0x65, + 0x72, 0x72, 0x65, 0x72, 0x12, 0x2a, 0x2e, 0x61, 0x67, 0x6e, 0x74, 0x63, 0x79, 0x2e, 0x64, 0x69, + 0x72, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x2b, 0x2e, 0x61, 0x67, 0x6e, 0x74, 0x63, 0x79, 0x2e, 0x64, 0x69, 0x72, 0x2e, 0x73, 0x74, + 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x66, + 0x65, 0x72, 0x72, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, + 0x01, 0x42, 0xbf, 0x01, 0x0a, 0x17, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x67, 0x6e, 0x74, 0x63, 0x79, + 0x2e, 0x64, 0x69, 0x72, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x42, 0x11, 0x53, + 0x74, 0x6f, 0x72, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, + 0x50, 0x01, 0x5a, 0x22, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, + 0x67, 0x6e, 0x74, 0x63, 0x79, 0x2f, 0x64, 0x69, 0x72, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, 0x74, + 0x6f, 0x72, 0x65, 0x2f, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x41, 0x44, 0x53, 0xaa, 0x02, 0x13, 0x41, + 0x67, 0x6e, 0x74, 0x63, 0x79, 0x2e, 0x44, 0x69, 0x72, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x2e, + 0x56, 0x31, 0xca, 0x02, 0x13, 0x41, 0x67, 0x6e, 0x74, 0x63, 0x79, 0x5c, 0x44, 0x69, 0x72, 0x5c, + 0x53, 0x74, 0x6f, 0x72, 0x65, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x1f, 0x41, 0x67, 0x6e, 0x74, 0x63, + 0x79, 0x5c, 0x44, 0x69, 0x72, 0x5c, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x5c, 0x56, 0x31, 0x5c, 0x47, + 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x16, 0x41, 0x67, 0x6e, + 0x74, 0x63, 0x79, 0x3a, 0x3a, 0x44, 0x69, 0x72, 0x3a, 0x3a, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x3a, + 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, }) var ( @@ -406,45 +542,52 @@ func file_agntcy_dir_store_v1_store_service_proto_rawDescGZIP() []byte { return file_agntcy_dir_store_v1_store_service_proto_rawDescData } -var file_agntcy_dir_store_v1_store_service_proto_msgTypes = make([]protoimpl.MessageInfo, 5) +var file_agntcy_dir_store_v1_store_service_proto_msgTypes = make([]protoimpl.MessageInfo, 7) var file_agntcy_dir_store_v1_store_service_proto_goTypes = []any{ - (*PushReferrerRequest)(nil), // 0: agntcy.dir.store.v1.PushReferrerRequest - (*PushReferrerResponse)(nil), // 1: agntcy.dir.store.v1.PushReferrerResponse - (*PullReferrerRequest)(nil), // 2: agntcy.dir.store.v1.PullReferrerRequest - (*PullReferrerResponse)(nil), // 3: agntcy.dir.store.v1.PullReferrerResponse - nil, // 4: agntcy.dir.store.v1.PushReferrerRequest.AnnotationsEntry - (*v1.RecordRef)(nil), // 5: agntcy.dir.core.v1.RecordRef - (*structpb.Struct)(nil), // 6: google.protobuf.Struct - (*v1.ReferrerRef)(nil), // 7: agntcy.dir.core.v1.ReferrerRef - (*v1.RecordReferrer)(nil), // 8: agntcy.dir.core.v1.RecordReferrer - (*v1.Record)(nil), // 9: agntcy.dir.core.v1.Record - (*v1.RecordMeta)(nil), // 10: agntcy.dir.core.v1.RecordMeta - (*emptypb.Empty)(nil), // 11: google.protobuf.Empty + (*PushReferrerRequest)(nil), // 0: agntcy.dir.store.v1.PushReferrerRequest + (*PushReferrerResponse)(nil), // 1: agntcy.dir.store.v1.PushReferrerResponse + (*PullReferrerRequest)(nil), // 2: agntcy.dir.store.v1.PullReferrerRequest + (*PullReferrerResponse)(nil), // 3: agntcy.dir.store.v1.PullReferrerResponse + (*DeleteReferrerRequest)(nil), // 4: agntcy.dir.store.v1.DeleteReferrerRequest + (*DeleteReferrerResponse)(nil), // 5: agntcy.dir.store.v1.DeleteReferrerResponse + nil, // 6: agntcy.dir.store.v1.PushReferrerRequest.AnnotationsEntry + (*v1.RecordRef)(nil), // 7: agntcy.dir.core.v1.RecordRef + (*structpb.Struct)(nil), // 8: google.protobuf.Struct + (*v1.ReferrerRef)(nil), // 9: agntcy.dir.core.v1.ReferrerRef + (*v1.RecordReferrer)(nil), // 10: agntcy.dir.core.v1.RecordReferrer + (*v1.Record)(nil), // 11: agntcy.dir.core.v1.Record + (*v1.RecordMeta)(nil), // 12: agntcy.dir.core.v1.RecordMeta + (*emptypb.Empty)(nil), // 13: google.protobuf.Empty } var file_agntcy_dir_store_v1_store_service_proto_depIdxs = []int32{ - 5, // 0: agntcy.dir.store.v1.PushReferrerRequest.record_ref:type_name -> agntcy.dir.core.v1.RecordRef - 4, // 1: agntcy.dir.store.v1.PushReferrerRequest.annotations:type_name -> agntcy.dir.store.v1.PushReferrerRequest.AnnotationsEntry - 6, // 2: agntcy.dir.store.v1.PushReferrerRequest.data:type_name -> google.protobuf.Struct - 7, // 3: agntcy.dir.store.v1.PushReferrerResponse.referrer_ref:type_name -> agntcy.dir.core.v1.ReferrerRef - 5, // 4: agntcy.dir.store.v1.PullReferrerRequest.record_ref:type_name -> agntcy.dir.core.v1.RecordRef - 8, // 5: agntcy.dir.store.v1.PullReferrerResponse.referrer:type_name -> agntcy.dir.core.v1.RecordReferrer - 9, // 6: agntcy.dir.store.v1.StoreService.Push:input_type -> agntcy.dir.core.v1.Record - 5, // 7: agntcy.dir.store.v1.StoreService.Pull:input_type -> agntcy.dir.core.v1.RecordRef - 5, // 8: agntcy.dir.store.v1.StoreService.Lookup:input_type -> agntcy.dir.core.v1.RecordRef - 5, // 9: agntcy.dir.store.v1.StoreService.Delete:input_type -> agntcy.dir.core.v1.RecordRef - 0, // 10: agntcy.dir.store.v1.StoreService.PushReferrer:input_type -> agntcy.dir.store.v1.PushReferrerRequest - 2, // 11: agntcy.dir.store.v1.StoreService.PullReferrer:input_type -> agntcy.dir.store.v1.PullReferrerRequest - 5, // 12: agntcy.dir.store.v1.StoreService.Push:output_type -> agntcy.dir.core.v1.RecordRef - 9, // 13: agntcy.dir.store.v1.StoreService.Pull:output_type -> agntcy.dir.core.v1.Record - 10, // 14: agntcy.dir.store.v1.StoreService.Lookup:output_type -> agntcy.dir.core.v1.RecordMeta - 11, // 15: agntcy.dir.store.v1.StoreService.Delete:output_type -> google.protobuf.Empty - 1, // 16: agntcy.dir.store.v1.StoreService.PushReferrer:output_type -> agntcy.dir.store.v1.PushReferrerResponse - 3, // 17: agntcy.dir.store.v1.StoreService.PullReferrer:output_type -> agntcy.dir.store.v1.PullReferrerResponse - 12, // [12:18] is the sub-list for method output_type - 6, // [6:12] is the sub-list for method input_type - 6, // [6:6] is the sub-list for extension type_name - 6, // [6:6] is the sub-list for extension extendee - 0, // [0:6] is the sub-list for field type_name + 7, // 0: agntcy.dir.store.v1.PushReferrerRequest.record_ref:type_name -> agntcy.dir.core.v1.RecordRef + 6, // 1: agntcy.dir.store.v1.PushReferrerRequest.annotations:type_name -> agntcy.dir.store.v1.PushReferrerRequest.AnnotationsEntry + 8, // 2: agntcy.dir.store.v1.PushReferrerRequest.data:type_name -> google.protobuf.Struct + 9, // 3: agntcy.dir.store.v1.PushReferrerResponse.referrer_ref:type_name -> agntcy.dir.core.v1.ReferrerRef + 7, // 4: agntcy.dir.store.v1.PullReferrerRequest.record_ref:type_name -> agntcy.dir.core.v1.RecordRef + 10, // 5: agntcy.dir.store.v1.PullReferrerResponse.referrer:type_name -> agntcy.dir.core.v1.RecordReferrer + 7, // 6: agntcy.dir.store.v1.DeleteReferrerRequest.record:type_name -> agntcy.dir.core.v1.RecordRef + 9, // 7: agntcy.dir.store.v1.DeleteReferrerRequest.referrer_ref:type_name -> agntcy.dir.core.v1.ReferrerRef + 9, // 8: agntcy.dir.store.v1.DeleteReferrerResponse.referrer_refs:type_name -> agntcy.dir.core.v1.ReferrerRef + 11, // 9: agntcy.dir.store.v1.StoreService.Push:input_type -> agntcy.dir.core.v1.Record + 7, // 10: agntcy.dir.store.v1.StoreService.Pull:input_type -> agntcy.dir.core.v1.RecordRef + 7, // 11: agntcy.dir.store.v1.StoreService.Lookup:input_type -> agntcy.dir.core.v1.RecordRef + 7, // 12: agntcy.dir.store.v1.StoreService.Delete:input_type -> agntcy.dir.core.v1.RecordRef + 0, // 13: agntcy.dir.store.v1.StoreService.PushReferrer:input_type -> agntcy.dir.store.v1.PushReferrerRequest + 2, // 14: agntcy.dir.store.v1.StoreService.PullReferrer:input_type -> agntcy.dir.store.v1.PullReferrerRequest + 4, // 15: agntcy.dir.store.v1.StoreService.DeleteReferrer:input_type -> agntcy.dir.store.v1.DeleteReferrerRequest + 7, // 16: agntcy.dir.store.v1.StoreService.Push:output_type -> agntcy.dir.core.v1.RecordRef + 11, // 17: agntcy.dir.store.v1.StoreService.Pull:output_type -> agntcy.dir.core.v1.Record + 12, // 18: agntcy.dir.store.v1.StoreService.Lookup:output_type -> agntcy.dir.core.v1.RecordMeta + 13, // 19: agntcy.dir.store.v1.StoreService.Delete:output_type -> google.protobuf.Empty + 1, // 20: agntcy.dir.store.v1.StoreService.PushReferrer:output_type -> agntcy.dir.store.v1.PushReferrerResponse + 3, // 21: agntcy.dir.store.v1.StoreService.PullReferrer:output_type -> agntcy.dir.store.v1.PullReferrerResponse + 5, // 22: agntcy.dir.store.v1.StoreService.DeleteReferrer:output_type -> agntcy.dir.store.v1.DeleteReferrerResponse + 16, // [16:23] is the sub-list for method output_type + 9, // [9:16] is the sub-list for method input_type + 9, // [9:9] is the sub-list for extension type_name + 9, // [9:9] is the sub-list for extension extendee + 0, // [0:9] is the sub-list for field type_name } func init() { file_agntcy_dir_store_v1_store_service_proto_init() } @@ -454,13 +597,14 @@ func file_agntcy_dir_store_v1_store_service_proto_init() { } file_agntcy_dir_store_v1_store_service_proto_msgTypes[1].OneofWrappers = []any{} file_agntcy_dir_store_v1_store_service_proto_msgTypes[2].OneofWrappers = []any{} + file_agntcy_dir_store_v1_store_service_proto_msgTypes[4].OneofWrappers = []any{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: unsafe.Slice(unsafe.StringData(file_agntcy_dir_store_v1_store_service_proto_rawDesc), len(file_agntcy_dir_store_v1_store_service_proto_rawDesc)), NumEnums: 0, - NumMessages: 5, + NumMessages: 7, NumExtensions: 0, NumServices: 1, }, diff --git a/api/store/v1/store_service_grpc.pb.go b/api/store/v1/store_service_grpc.pb.go index 7650a31a0..ee1444709 100644 --- a/api/store/v1/store_service_grpc.pb.go +++ b/api/store/v1/store_service_grpc.pb.go @@ -24,12 +24,13 @@ import ( const _ = grpc.SupportPackageIsVersion8 const ( - StoreService_Push_FullMethodName = "/agntcy.dir.store.v1.StoreService/Push" - StoreService_Pull_FullMethodName = "/agntcy.dir.store.v1.StoreService/Pull" - StoreService_Lookup_FullMethodName = "/agntcy.dir.store.v1.StoreService/Lookup" - StoreService_Delete_FullMethodName = "/agntcy.dir.store.v1.StoreService/Delete" - StoreService_PushReferrer_FullMethodName = "/agntcy.dir.store.v1.StoreService/PushReferrer" - StoreService_PullReferrer_FullMethodName = "/agntcy.dir.store.v1.StoreService/PullReferrer" + StoreService_Push_FullMethodName = "/agntcy.dir.store.v1.StoreService/Push" + StoreService_Pull_FullMethodName = "/agntcy.dir.store.v1.StoreService/Pull" + StoreService_Lookup_FullMethodName = "/agntcy.dir.store.v1.StoreService/Lookup" + StoreService_Delete_FullMethodName = "/agntcy.dir.store.v1.StoreService/Delete" + StoreService_PushReferrer_FullMethodName = "/agntcy.dir.store.v1.StoreService/PushReferrer" + StoreService_PullReferrer_FullMethodName = "/agntcy.dir.store.v1.StoreService/PullReferrer" + StoreService_DeleteReferrer_FullMethodName = "/agntcy.dir.store.v1.StoreService/DeleteReferrer" ) // StoreServiceClient is the client API for StoreService service. @@ -64,6 +65,8 @@ type StoreServiceClient interface { PushReferrer(ctx context.Context, opts ...grpc.CallOption) (StoreService_PushReferrerClient, error) // PullReferrer performs read operation for record referrers. PullReferrer(ctx context.Context, opts ...grpc.CallOption) (StoreService_PullReferrerClient, error) + // DeleteReferrer performs delete operation for record referrers. + DeleteReferrer(ctx context.Context, opts ...grpc.CallOption) (StoreService_DeleteReferrerClient, error) } type storeServiceClient struct { @@ -269,6 +272,38 @@ func (x *storeServicePullReferrerClient) Recv() (*PullReferrerResponse, error) { return m, nil } +func (c *storeServiceClient) DeleteReferrer(ctx context.Context, opts ...grpc.CallOption) (StoreService_DeleteReferrerClient, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + stream, err := c.cc.NewStream(ctx, &StoreService_ServiceDesc.Streams[6], StoreService_DeleteReferrer_FullMethodName, cOpts...) + if err != nil { + return nil, err + } + x := &storeServiceDeleteReferrerClient{ClientStream: stream} + return x, nil +} + +type StoreService_DeleteReferrerClient interface { + Send(*DeleteReferrerRequest) error + Recv() (*DeleteReferrerResponse, error) + grpc.ClientStream +} + +type storeServiceDeleteReferrerClient struct { + grpc.ClientStream +} + +func (x *storeServiceDeleteReferrerClient) Send(m *DeleteReferrerRequest) error { + return x.ClientStream.SendMsg(m) +} + +func (x *storeServiceDeleteReferrerClient) Recv() (*DeleteReferrerResponse, error) { + m := new(DeleteReferrerResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + // StoreServiceServer is the server API for StoreService service. // All implementations should embed UnimplementedStoreServiceServer // for forward compatibility. @@ -301,6 +336,8 @@ type StoreServiceServer interface { PushReferrer(StoreService_PushReferrerServer) error // PullReferrer performs read operation for record referrers. PullReferrer(StoreService_PullReferrerServer) error + // DeleteReferrer performs delete operation for record referrers. + DeleteReferrer(StoreService_DeleteReferrerServer) error } // UnimplementedStoreServiceServer should be embedded to have @@ -328,6 +365,9 @@ func (UnimplementedStoreServiceServer) PushReferrer(StoreService_PushReferrerSer func (UnimplementedStoreServiceServer) PullReferrer(StoreService_PullReferrerServer) error { return status.Errorf(codes.Unimplemented, "method PullReferrer not implemented") } +func (UnimplementedStoreServiceServer) DeleteReferrer(StoreService_DeleteReferrerServer) error { + return status.Errorf(codes.Unimplemented, "method DeleteReferrer not implemented") +} func (UnimplementedStoreServiceServer) testEmbeddedByValue() {} // UnsafeStoreServiceServer may be embedded to opt out of forward compatibility for this service. @@ -504,6 +544,32 @@ func (x *storeServicePullReferrerServer) Recv() (*PullReferrerRequest, error) { return m, nil } +func _StoreService_DeleteReferrer_Handler(srv interface{}, stream grpc.ServerStream) error { + return srv.(StoreServiceServer).DeleteReferrer(&storeServiceDeleteReferrerServer{ServerStream: stream}) +} + +type StoreService_DeleteReferrerServer interface { + Send(*DeleteReferrerResponse) error + Recv() (*DeleteReferrerRequest, error) + grpc.ServerStream +} + +type storeServiceDeleteReferrerServer struct { + grpc.ServerStream +} + +func (x *storeServiceDeleteReferrerServer) Send(m *DeleteReferrerResponse) error { + return x.ServerStream.SendMsg(m) +} + +func (x *storeServiceDeleteReferrerServer) Recv() (*DeleteReferrerRequest, error) { + m := new(DeleteReferrerRequest) + if err := x.ServerStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + // StoreService_ServiceDesc is the grpc.ServiceDesc for StoreService service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -547,6 +613,12 @@ var StoreService_ServiceDesc = grpc.ServiceDesc{ ServerStreams: true, ClientStreams: true, }, + { + StreamName: "DeleteReferrer", + Handler: _StoreService_DeleteReferrer_Handler, + ServerStreams: true, + ClientStreams: true, + }, }, Metadata: "agntcy/dir/store/v1/store_service.proto", } diff --git a/client/store.go b/client/store.go index 13bfc8c9d..6b21beabf 100644 --- a/client/store.go +++ b/client/store.go @@ -296,3 +296,28 @@ func (c *Client) DeleteStream(ctx context.Context, refsCh <-chan *corev1.RecordR //nolint:wrapcheck return streaming.ProcessClientStream(ctx, stream, refsCh) } + +func (c *Client) DeleteReferrer( + ctx context.Context, + req *storev1.DeleteReferrerRequest, +) (*storev1.DeleteReferrerResponse, error) { + stream, err := c.StoreServiceClient.DeleteReferrer(ctx) + if err != nil { + return nil, fmt.Errorf("failed to create delete referrer stream: %w", err) + } + + if err := stream.Send(req); err != nil { + return nil, fmt.Errorf("failed to send delete referrer request: %w", err) + } + + if err := stream.CloseSend(); err != nil { + return nil, fmt.Errorf("failed to close send stream: %w", err) + } + + response, err := stream.Recv() + if err != nil { + return nil, fmt.Errorf("failed to receive delete referrer response: %w", err) + } + + return response, nil +} diff --git a/proto/agntcy/dir/core/v1/record.proto b/proto/agntcy/dir/core/v1/record.proto index f9a6f1a67..eaf52b466 100644 --- a/proto/agntcy/dir/core/v1/record.proto +++ b/proto/agntcy/dir/core/v1/record.proto @@ -7,6 +7,7 @@ package agntcy.dir.core.v1; import "google/protobuf/struct.proto"; import "buf/validate/validate.proto"; +import "agntcy/dir/core/v1/referrer.proto"; // Defines a reference or a globally unique content identifier of a record. message RecordRef { @@ -88,4 +89,7 @@ message RecordReferrer { // The actual data of the referrer. google.protobuf.Struct data = 5; + + // The CID of the referrer. + core.v1.ReferrerRef referrer_ref = 6; } diff --git a/proto/agntcy/dir/store/v1/store_service.proto b/proto/agntcy/dir/store/v1/store_service.proto index e4d328064..641afbcad 100644 --- a/proto/agntcy/dir/store/v1/store_service.proto +++ b/proto/agntcy/dir/store/v1/store_service.proto @@ -44,6 +44,9 @@ service StoreService { // PullReferrer performs read operation for record referrers. rpc PullReferrer(stream PullReferrerRequest) returns (stream PullReferrerResponse); + + // DeleteReferrer performs delete operation for record referrers. + rpc DeleteReferrer(stream DeleteReferrerRequest) returns (stream DeleteReferrerResponse); } // PushReferrerRequest represents a record with optional OCI artifacts for push operations. @@ -103,3 +106,23 @@ message PullReferrerResponse { // RecordReferrer object associated with the record core.v1.RecordReferrer referrer = 1; } + +message DeleteReferrerRequest { + // The record the referrer(s) are referring to. + core.v1.RecordRef record = 1 [ + (buf.validate.field).required = true + ]; + + // The CID of the referrer to delete. + // If set, delete the referrer by CID. + core.v1.ReferrerRef referrer_ref = 2; + + // The referrer type of the referrers to delete. + // If set, delete the referrers with given type. + optional string referrer_type = 3; +} + +message DeleteReferrerResponse { + // The CID(s) of the deleted referrers. + repeated core.v1.ReferrerRef referrer_refs = 1; +} diff --git a/sdk/dir-js/src/models/agntcy/dir/core/v1/record_pb.d.ts b/sdk/dir-js/src/models/agntcy/dir/core/v1/record_pb.d.ts index 4e3f90cb3..b0a9b19ce 100644 --- a/sdk/dir-js/src/models/agntcy/dir/core/v1/record_pb.d.ts +++ b/sdk/dir-js/src/models/agntcy/dir/core/v1/record_pb.d.ts @@ -7,6 +7,7 @@ import type { GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2"; import type { JsonObject, Message } from "@bufbuild/protobuf"; +import type { ReferrerRef } from "./referrer_pb.js"; /** * Describes the file agntcy/dir/core/v1/record.proto. @@ -181,6 +182,13 @@ export declare type RecordReferrer = Message<"agntcy.dir.core.v1.RecordReferrer" * @generated from field: google.protobuf.Struct data = 5; */ data?: JsonObject; + + /** + * The CID of the referrer. + * + * @generated from field: agntcy.dir.core.v1.ReferrerRef referrer_ref = 6; + */ + referrerRef?: ReferrerRef; }; /** diff --git a/sdk/dir-js/src/models/agntcy/dir/core/v1/record_pb.js b/sdk/dir-js/src/models/agntcy/dir/core/v1/record_pb.js index 121bea931..421dc0b92 100644 --- a/sdk/dir-js/src/models/agntcy/dir/core/v1/record_pb.js +++ b/sdk/dir-js/src/models/agntcy/dir/core/v1/record_pb.js @@ -8,12 +8,13 @@ import { fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv2"; import { file_google_protobuf_struct } from "@bufbuild/protobuf/wkt"; import { file_buf_validate_validate } from "../../../../buf/validate/validate_pb.js"; +import { file_agntcy_dir_core_v1_referrer } from "./referrer_pb.js"; /** * Describes the file agntcy/dir/core/v1/record.proto. */ export const file_agntcy_dir_core_v1_record = /*@__PURE__*/ - fileDesc("Ch9hZ250Y3kvZGlyL2NvcmUvdjEvcmVjb3JkLnByb3RvEhJhZ250Y3kuZGlyLmNvcmUudjEiJwoJUmVjb3JkUmVmEhoKA2NpZBgBIAEoCUINukgKyAEBcgUQARiAASI8Cg5OYW1lZFJlY29yZFJlZhIMCgRuYW1lGAEgASgJEg8KB3ZlcnNpb24YAiABKAkSCwoDY2lkGAMgASgJIr8BCgpSZWNvcmRNZXRhEgsKA2NpZBgBIAEoCRJECgthbm5vdGF0aW9ucxgCIAMoCzIvLmFnbnRjeS5kaXIuY29yZS52MS5SZWNvcmRNZXRhLkFubm90YXRpb25zRW50cnkSFgoOc2NoZW1hX3ZlcnNpb24YAyABKAkSEgoKY3JlYXRlZF9hdBgEIAEoCRoyChBBbm5vdGF0aW9uc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEiLwoGUmVjb3JkEiUKBGRhdGEYASABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0Is0CCg5SZWNvcmRSZWZlcnJlchJPCgR0eXBlGAEgASgJQkG6SD5yPFIcYWdudGN5LmRpci5zaWduLnYxLlB1YmxpY0tleVIcYWdudGN5LmRpci5zaWduLnYxLlNpZ25hdHVyZRIxCgpyZWNvcmRfcmVmGAIgASgLMh0uYWdudGN5LmRpci5jb3JlLnYxLlJlY29yZFJlZhJICgthbm5vdGF0aW9ucxgDIAMoCzIzLmFnbnRjeS5kaXIuY29yZS52MS5SZWNvcmRSZWZlcnJlci5Bbm5vdGF0aW9uc0VudHJ5EhIKCmNyZWF0ZWRfYXQYBCABKAkSJQoEZGF0YRgFIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QaMgoQQW5ub3RhdGlvbnNFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBQrMBChZjb20uYWdudGN5LmRpci5jb3JlLnYxQgtSZWNvcmRQcm90b1ABWiFnaXRodWIuY29tL2FnbnRjeS9kaXIvYXBpL2NvcmUvdjGiAgNBREOqAhJBZ250Y3kuRGlyLkNvcmUuVjHKAhJBZ250Y3lcRGlyXENvcmVcVjHiAh5BZ250Y3lcRGlyXENvcmVcVjFcR1BCTWV0YWRhdGHqAhVBZ250Y3k6OkRpcjo6Q29yZTo6VjFiBnByb3RvMw", [file_google_protobuf_struct, file_buf_validate_validate]); + fileDesc("Ch9hZ250Y3kvZGlyL2NvcmUvdjEvcmVjb3JkLnByb3RvEhJhZ250Y3kuZGlyLmNvcmUudjEiJwoJUmVjb3JkUmVmEhoKA2NpZBgBIAEoCUINukgKyAEBcgUQARiAASI8Cg5OYW1lZFJlY29yZFJlZhIMCgRuYW1lGAEgASgJEg8KB3ZlcnNpb24YAiABKAkSCwoDY2lkGAMgASgJIr8BCgpSZWNvcmRNZXRhEgsKA2NpZBgBIAEoCRJECgthbm5vdGF0aW9ucxgCIAMoCzIvLmFnbnRjeS5kaXIuY29yZS52MS5SZWNvcmRNZXRhLkFubm90YXRpb25zRW50cnkSFgoOc2NoZW1hX3ZlcnNpb24YAyABKAkSEgoKY3JlYXRlZF9hdBgEIAEoCRoyChBBbm5vdGF0aW9uc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEiLwoGUmVjb3JkEiUKBGRhdGEYASABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0IoQDCg5SZWNvcmRSZWZlcnJlchJPCgR0eXBlGAEgASgJQkG6SD5yPFIcYWdudGN5LmRpci5zaWduLnYxLlB1YmxpY0tleVIcYWdudGN5LmRpci5zaWduLnYxLlNpZ25hdHVyZRIxCgpyZWNvcmRfcmVmGAIgASgLMh0uYWdudGN5LmRpci5jb3JlLnYxLlJlY29yZFJlZhJICgthbm5vdGF0aW9ucxgDIAMoCzIzLmFnbnRjeS5kaXIuY29yZS52MS5SZWNvcmRSZWZlcnJlci5Bbm5vdGF0aW9uc0VudHJ5EhIKCmNyZWF0ZWRfYXQYBCABKAkSJQoEZGF0YRgFIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QSNQoMcmVmZXJyZXJfcmVmGAYgASgLMh8uYWdudGN5LmRpci5jb3JlLnYxLlJlZmVycmVyUmVmGjIKEEFubm90YXRpb25zRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4AUKzAQoWY29tLmFnbnRjeS5kaXIuY29yZS52MUILUmVjb3JkUHJvdG9QAVohZ2l0aHViLmNvbS9hZ250Y3kvZGlyL2FwaS9jb3JlL3YxogIDQURDqgISQWdudGN5LkRpci5Db3JlLlYxygISQWdudGN5XERpclxDb3JlXFYx4gIeQWdudGN5XERpclxDb3JlXFYxXEdQQk1ldGFkYXRh6gIVQWdudGN5OjpEaXI6OkNvcmU6OlYxYgZwcm90bzM", [file_google_protobuf_struct, file_buf_validate_validate, file_agntcy_dir_core_v1_referrer]); /** * Describes the message agntcy.dir.core.v1.RecordRef. diff --git a/sdk/dir-js/src/models/agntcy/dir/store/v1/store_service_pb.d.ts b/sdk/dir-js/src/models/agntcy/dir/store/v1/store_service_pb.d.ts index 9f978ccff..feaf1e290 100644 --- a/sdk/dir-js/src/models/agntcy/dir/store/v1/store_service_pb.d.ts +++ b/sdk/dir-js/src/models/agntcy/dir/store/v1/store_service_pb.d.ts @@ -148,6 +148,58 @@ export declare type PullReferrerResponse = Message<"agntcy.dir.store.v1.PullRefe */ export declare const PullReferrerResponseSchema: GenMessage; +/** + * @generated from message agntcy.dir.store.v1.DeleteReferrerRequest + */ +export declare type DeleteReferrerRequest = Message<"agntcy.dir.store.v1.DeleteReferrerRequest"> & { + /** + * The record the referrer(s) are referring to. + * + * @generated from field: agntcy.dir.core.v1.RecordRef record = 1; + */ + record?: RecordRef; + + /** + * The CID of the referrer to delete. + * If set, delete the referrer by CID. + * + * @generated from field: agntcy.dir.core.v1.ReferrerRef referrer_ref = 2; + */ + referrerRef?: ReferrerRef; + + /** + * The referrer type of the referrers to delete. + * If set, delete the referrers with given type. + * + * @generated from field: optional string referrer_type = 3; + */ + referrerType?: string; +}; + +/** + * Describes the message agntcy.dir.store.v1.DeleteReferrerRequest. + * Use `create(DeleteReferrerRequestSchema)` to create a new message. + */ +export declare const DeleteReferrerRequestSchema: GenMessage; + +/** + * @generated from message agntcy.dir.store.v1.DeleteReferrerResponse + */ +export declare type DeleteReferrerResponse = Message<"agntcy.dir.store.v1.DeleteReferrerResponse"> & { + /** + * The CID(s) of the deleted referrers. + * + * @generated from field: repeated agntcy.dir.core.v1.ReferrerRef referrer_refs = 1; + */ + referrerRefs: ReferrerRef[]; +}; + +/** + * Describes the message agntcy.dir.store.v1.DeleteReferrerResponse. + * Use `create(DeleteReferrerResponseSchema)` to create a new message. + */ +export declare const DeleteReferrerResponseSchema: GenMessage; + /** * Defines an interface for content-addressable storage * service for objects. @@ -228,5 +280,15 @@ export declare const StoreService: GenService<{ input: typeof PullReferrerRequestSchema; output: typeof PullReferrerResponseSchema; }, + /** + * DeleteReferrer performs delete operation for record referrers. + * + * @generated from rpc agntcy.dir.store.v1.StoreService.DeleteReferrer + */ + deleteReferrer: { + methodKind: "bidi_streaming"; + input: typeof DeleteReferrerRequestSchema; + output: typeof DeleteReferrerResponseSchema; + }, }>; diff --git a/sdk/dir-js/src/models/agntcy/dir/store/v1/store_service_pb.js b/sdk/dir-js/src/models/agntcy/dir/store/v1/store_service_pb.js index 448667aca..fe0b4b4b1 100644 --- a/sdk/dir-js/src/models/agntcy/dir/store/v1/store_service_pb.js +++ b/sdk/dir-js/src/models/agntcy/dir/store/v1/store_service_pb.js @@ -15,7 +15,7 @@ import { file_buf_validate_validate } from "../../../../buf/validate/validate_pb * Describes the file agntcy/dir/store/v1/store_service.proto. */ export const file_agntcy_dir_store_v1_store_service = /*@__PURE__*/ - fileDesc("CidhZ250Y3kvZGlyL3N0b3JlL3YxL3N0b3JlX3NlcnZpY2UucHJvdG8SE2FnbnRjeS5kaXIuc3RvcmUudjEi4wIKE1B1c2hSZWZlcnJlclJlcXVlc3QSOQoKcmVjb3JkX3JlZhgBIAEoCzIdLmFnbnRjeS5kaXIuY29yZS52MS5SZWNvcmRSZWZCBrpIA8gBARJSCgR0eXBlGAIgASgJQkS6SEHIAQFyPFIcYWdudGN5LmRpci5zaWduLnYxLlB1YmxpY0tleVIcYWdudGN5LmRpci5zaWduLnYxLlNpZ25hdHVyZRJOCgthbm5vdGF0aW9ucxgDIAMoCzI5LmFnbnRjeS5kaXIuc3RvcmUudjEuUHVzaFJlZmVycmVyUmVxdWVzdC5Bbm5vdGF0aW9uc0VudHJ5EhIKCmNyZWF0ZWRfYXQYBCABKAkSJQoEZGF0YRgFIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QaMgoQQW5ub3RhdGlvbnNFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBIowBChRQdXNoUmVmZXJyZXJSZXNwb25zZRIPCgdzdWNjZXNzGAEgASgIEhoKDWVycm9yX21lc3NhZ2UYAiABKAlIAIgBARI1CgxyZWZlcnJlcl9yZWYYAyABKAsyHy5hZ250Y3kuZGlyLmNvcmUudjEuUmVmZXJyZXJSZWZCEAoOX2Vycm9yX21lc3NhZ2UidgoTUHVsbFJlZmVycmVyUmVxdWVzdBIxCgpyZWNvcmRfcmVmGAEgASgLMh0uYWdudGN5LmRpci5jb3JlLnYxLlJlY29yZFJlZhIaCg1yZWZlcnJlcl90eXBlGAIgASgJSACIAQFCEAoOX3JlZmVycmVyX3R5cGUiTAoUUHVsbFJlZmVycmVyUmVzcG9uc2USNAoIcmVmZXJyZXIYASABKAsyIi5hZ250Y3kuZGlyLmNvcmUudjEuUmVjb3JkUmVmZXJyZXIy/gMKDFN0b3JlU2VydmljZRJFCgRQdXNoEhouYWdudGN5LmRpci5jb3JlLnYxLlJlY29yZBodLmFnbnRjeS5kaXIuY29yZS52MS5SZWNvcmRSZWYoATABEkUKBFB1bGwSHS5hZ250Y3kuZGlyLmNvcmUudjEuUmVjb3JkUmVmGhouYWdudGN5LmRpci5jb3JlLnYxLlJlY29yZCgBMAESSwoGTG9va3VwEh0uYWdudGN5LmRpci5jb3JlLnYxLlJlY29yZFJlZhoeLmFnbnRjeS5kaXIuY29yZS52MS5SZWNvcmRNZXRhKAEwARJBCgZEZWxldGUSHS5hZ250Y3kuZGlyLmNvcmUudjEuUmVjb3JkUmVmGhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5KAESZwoMUHVzaFJlZmVycmVyEiguYWdudGN5LmRpci5zdG9yZS52MS5QdXNoUmVmZXJyZXJSZXF1ZXN0GikuYWdudGN5LmRpci5zdG9yZS52MS5QdXNoUmVmZXJyZXJSZXNwb25zZSgBMAESZwoMUHVsbFJlZmVycmVyEiguYWdudGN5LmRpci5zdG9yZS52MS5QdWxsUmVmZXJyZXJSZXF1ZXN0GikuYWdudGN5LmRpci5zdG9yZS52MS5QdWxsUmVmZXJyZXJSZXNwb25zZSgBMAFCvwEKF2NvbS5hZ250Y3kuZGlyLnN0b3JlLnYxQhFTdG9yZVNlcnZpY2VQcm90b1ABWiJnaXRodWIuY29tL2FnbnRjeS9kaXIvYXBpL3N0b3JlL3YxogIDQURTqgITQWdudGN5LkRpci5TdG9yZS5WMcoCE0FnbnRjeVxEaXJcU3RvcmVcVjHiAh9BZ250Y3lcRGlyXFN0b3JlXFYxXEdQQk1ldGFkYXRh6gIWQWdudGN5OjpEaXI6OlN0b3JlOjpWMWIGcHJvdG8z", [file_agntcy_dir_core_v1_record, file_agntcy_dir_core_v1_referrer, file_google_protobuf_empty, file_google_protobuf_struct, file_buf_validate_validate]); + fileDesc("CidhZ250Y3kvZGlyL3N0b3JlL3YxL3N0b3JlX3NlcnZpY2UucHJvdG8SE2FnbnRjeS5kaXIuc3RvcmUudjEi4wIKE1B1c2hSZWZlcnJlclJlcXVlc3QSOQoKcmVjb3JkX3JlZhgBIAEoCzIdLmFnbnRjeS5kaXIuY29yZS52MS5SZWNvcmRSZWZCBrpIA8gBARJSCgR0eXBlGAIgASgJQkS6SEHIAQFyPFIcYWdudGN5LmRpci5zaWduLnYxLlB1YmxpY0tleVIcYWdudGN5LmRpci5zaWduLnYxLlNpZ25hdHVyZRJOCgthbm5vdGF0aW9ucxgDIAMoCzI5LmFnbnRjeS5kaXIuc3RvcmUudjEuUHVzaFJlZmVycmVyUmVxdWVzdC5Bbm5vdGF0aW9uc0VudHJ5EhIKCmNyZWF0ZWRfYXQYBCABKAkSJQoEZGF0YRgFIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QaMgoQQW5ub3RhdGlvbnNFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBIowBChRQdXNoUmVmZXJyZXJSZXNwb25zZRIPCgdzdWNjZXNzGAEgASgIEhoKDWVycm9yX21lc3NhZ2UYAiABKAlIAIgBARI1CgxyZWZlcnJlcl9yZWYYAyABKAsyHy5hZ250Y3kuZGlyLmNvcmUudjEuUmVmZXJyZXJSZWZCEAoOX2Vycm9yX21lc3NhZ2UidgoTUHVsbFJlZmVycmVyUmVxdWVzdBIxCgpyZWNvcmRfcmVmGAEgASgLMh0uYWdudGN5LmRpci5jb3JlLnYxLlJlY29yZFJlZhIaCg1yZWZlcnJlcl90eXBlGAIgASgJSACIAQFCEAoOX3JlZmVycmVyX3R5cGUiTAoUUHVsbFJlZmVycmVyUmVzcG9uc2USNAoIcmVmZXJyZXIYASABKAsyIi5hZ250Y3kuZGlyLmNvcmUudjEuUmVjb3JkUmVmZXJyZXIiswEKFURlbGV0ZVJlZmVycmVyUmVxdWVzdBI1CgZyZWNvcmQYASABKAsyHS5hZ250Y3kuZGlyLmNvcmUudjEuUmVjb3JkUmVmQga6SAPIAQESNQoMcmVmZXJyZXJfcmVmGAIgASgLMh8uYWdudGN5LmRpci5jb3JlLnYxLlJlZmVycmVyUmVmEhoKDXJlZmVycmVyX3R5cGUYAyABKAlIAIgBAUIQCg5fcmVmZXJyZXJfdHlwZSJQChZEZWxldGVSZWZlcnJlclJlc3BvbnNlEjYKDXJlZmVycmVyX3JlZnMYASADKAsyHy5hZ250Y3kuZGlyLmNvcmUudjEuUmVmZXJyZXJSZWYy7QQKDFN0b3JlU2VydmljZRJFCgRQdXNoEhouYWdudGN5LmRpci5jb3JlLnYxLlJlY29yZBodLmFnbnRjeS5kaXIuY29yZS52MS5SZWNvcmRSZWYoATABEkUKBFB1bGwSHS5hZ250Y3kuZGlyLmNvcmUudjEuUmVjb3JkUmVmGhouYWdudGN5LmRpci5jb3JlLnYxLlJlY29yZCgBMAESSwoGTG9va3VwEh0uYWdudGN5LmRpci5jb3JlLnYxLlJlY29yZFJlZhoeLmFnbnRjeS5kaXIuY29yZS52MS5SZWNvcmRNZXRhKAEwARJBCgZEZWxldGUSHS5hZ250Y3kuZGlyLmNvcmUudjEuUmVjb3JkUmVmGhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5KAESZwoMUHVzaFJlZmVycmVyEiguYWdudGN5LmRpci5zdG9yZS52MS5QdXNoUmVmZXJyZXJSZXF1ZXN0GikuYWdudGN5LmRpci5zdG9yZS52MS5QdXNoUmVmZXJyZXJSZXNwb25zZSgBMAESZwoMUHVsbFJlZmVycmVyEiguYWdudGN5LmRpci5zdG9yZS52MS5QdWxsUmVmZXJyZXJSZXF1ZXN0GikuYWdudGN5LmRpci5zdG9yZS52MS5QdWxsUmVmZXJyZXJSZXNwb25zZSgBMAESbQoORGVsZXRlUmVmZXJyZXISKi5hZ250Y3kuZGlyLnN0b3JlLnYxLkRlbGV0ZVJlZmVycmVyUmVxdWVzdBorLmFnbnRjeS5kaXIuc3RvcmUudjEuRGVsZXRlUmVmZXJyZXJSZXNwb25zZSgBMAFCvwEKF2NvbS5hZ250Y3kuZGlyLnN0b3JlLnYxQhFTdG9yZVNlcnZpY2VQcm90b1ABWiJnaXRodWIuY29tL2FnbnRjeS9kaXIvYXBpL3N0b3JlL3YxogIDQURTqgITQWdudGN5LkRpci5TdG9yZS5WMcoCE0FnbnRjeVxEaXJcU3RvcmVcVjHiAh9BZ250Y3lcRGlyXFN0b3JlXFYxXEdQQk1ldGFkYXRh6gIWQWdudGN5OjpEaXI6OlN0b3JlOjpWMWIGcHJvdG8z", [file_agntcy_dir_core_v1_record, file_agntcy_dir_core_v1_referrer, file_google_protobuf_empty, file_google_protobuf_struct, file_buf_validate_validate]); /** * Describes the message agntcy.dir.store.v1.PushReferrerRequest. @@ -45,6 +45,20 @@ export const PullReferrerRequestSchema = /*@__PURE__*/ export const PullReferrerResponseSchema = /*@__PURE__*/ messageDesc(file_agntcy_dir_store_v1_store_service, 3); +/** + * Describes the message agntcy.dir.store.v1.DeleteReferrerRequest. + * Use `create(DeleteReferrerRequestSchema)` to create a new message. + */ +export const DeleteReferrerRequestSchema = /*@__PURE__*/ + messageDesc(file_agntcy_dir_store_v1_store_service, 4); + +/** + * Describes the message agntcy.dir.store.v1.DeleteReferrerResponse. + * Use `create(DeleteReferrerResponseSchema)` to create a new message. + */ +export const DeleteReferrerResponseSchema = /*@__PURE__*/ + messageDesc(file_agntcy_dir_store_v1_store_service, 5); + /** * Defines an interface for content-addressable storage * service for objects. diff --git a/sdk/dir-py/agntcy/dir/core/v1/record_pb2.py b/sdk/dir-py/agntcy/dir/core/v1/record_pb2.py index 7e5398a8c..986220650 100644 --- a/sdk/dir-py/agntcy/dir/core/v1/record_pb2.py +++ b/sdk/dir-py/agntcy/dir/core/v1/record_pb2.py @@ -24,9 +24,10 @@ from google.protobuf import struct_pb2 as google_dot_protobuf_dot_struct__pb2 from buf.validate import validate_pb2 as buf_dot_validate_dot_validate__pb2 +from agntcy.dir.core.v1 import referrer_pb2 as agntcy_dot_dir_dot_core_dot_v1_dot_referrer__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1f\x61gntcy/dir/core/v1/record.proto\x12\x12\x61gntcy.dir.core.v1\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1b\x62uf/validate/validate.proto\",\n\tRecordRef\x12\x1f\n\x03\x63id\x18\x01 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\x80\x01\xc8\x01\x01R\x03\x63id\"P\n\x0eNamedRecordRef\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12\x18\n\x07version\x18\x02 \x01(\tR\x07version\x12\x10\n\x03\x63id\x18\x03 \x01(\tR\x03\x63id\"\xf7\x01\n\nRecordMeta\x12\x10\n\x03\x63id\x18\x01 \x01(\tR\x03\x63id\x12Q\n\x0b\x61nnotations\x18\x02 \x03(\x0b\x32/.agntcy.dir.core.v1.RecordMeta.AnnotationsEntryR\x0b\x61nnotations\x12%\n\x0eschema_version\x18\x03 \x01(\tR\rschemaVersion\x12\x1d\n\ncreated_at\x18\x04 \x01(\tR\tcreatedAt\x1a>\n\x10\x41nnotationsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\"5\n\x06Record\x12+\n\x04\x64\x61ta\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructR\x04\x64\x61ta\"\x88\x03\n\x0eRecordReferrer\x12U\n\x04type\x18\x01 \x01(\tBA\xbaH>r\n\x10\x41nnotationsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\xb3\x01\n\x16\x63om.agntcy.dir.core.v1B\x0bRecordProtoP\x01Z!github.com/agntcy/dir/api/core/v1\xa2\x02\x03\x41\x44\x43\xaa\x02\x12\x41gntcy.Dir.Core.V1\xca\x02\x12\x41gntcy\\Dir\\Core\\V1\xe2\x02\x1e\x41gntcy\\Dir\\Core\\V1\\GPBMetadata\xea\x02\x15\x41gntcy::Dir::Core::V1b\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1f\x61gntcy/dir/core/v1/record.proto\x12\x12\x61gntcy.dir.core.v1\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1b\x62uf/validate/validate.proto\x1a!agntcy/dir/core/v1/referrer.proto\",\n\tRecordRef\x12\x1f\n\x03\x63id\x18\x01 \x01(\tB\r\xbaH\nr\x05\x10\x01\x18\x80\x01\xc8\x01\x01R\x03\x63id\"P\n\x0eNamedRecordRef\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12\x18\n\x07version\x18\x02 \x01(\tR\x07version\x12\x10\n\x03\x63id\x18\x03 \x01(\tR\x03\x63id\"\xf7\x01\n\nRecordMeta\x12\x10\n\x03\x63id\x18\x01 \x01(\tR\x03\x63id\x12Q\n\x0b\x61nnotations\x18\x02 \x03(\x0b\x32/.agntcy.dir.core.v1.RecordMeta.AnnotationsEntryR\x0b\x61nnotations\x12%\n\x0eschema_version\x18\x03 \x01(\tR\rschemaVersion\x12\x1d\n\ncreated_at\x18\x04 \x01(\tR\tcreatedAt\x1a>\n\x10\x41nnotationsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\"5\n\x06Record\x12+\n\x04\x64\x61ta\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructR\x04\x64\x61ta\"\xcc\x03\n\x0eRecordReferrer\x12U\n\x04type\x18\x01 \x01(\tBA\xbaH>r\n\x10\x41nnotationsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\xb3\x01\n\x16\x63om.agntcy.dir.core.v1B\x0bRecordProtoP\x01Z!github.com/agntcy/dir/api/core/v1\xa2\x02\x03\x41\x44\x43\xaa\x02\x12\x41gntcy.Dir.Core.V1\xca\x02\x12\x41gntcy\\Dir\\Core\\V1\xe2\x02\x1e\x41gntcy\\Dir\\Core\\V1\\GPBMetadata\xea\x02\x15\x41gntcy::Dir::Core::V1b\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -42,18 +43,18 @@ _globals['_RECORDREFERRER_ANNOTATIONSENTRY']._serialized_options = b'8\001' _globals['_RECORDREFERRER'].fields_by_name['type']._loaded_options = None _globals['_RECORDREFERRER'].fields_by_name['type']._serialized_options = b'\272H>r None: ... class RecordReferrer(_message.Message): - __slots__ = ("type", "record_ref", "annotations", "created_at", "data") + __slots__ = ("type", "record_ref", "annotations", "created_at", "data", "referrer_ref") class AnnotationsEntry(_message.Message): __slots__ = ("key", "value") KEY_FIELD_NUMBER: _ClassVar[int] @@ -62,9 +63,11 @@ class RecordReferrer(_message.Message): ANNOTATIONS_FIELD_NUMBER: _ClassVar[int] CREATED_AT_FIELD_NUMBER: _ClassVar[int] DATA_FIELD_NUMBER: _ClassVar[int] + REFERRER_REF_FIELD_NUMBER: _ClassVar[int] type: str record_ref: RecordRef annotations: _containers.ScalarMap[str, str] created_at: str data: _struct_pb2.Struct - def __init__(self, type: _Optional[str] = ..., record_ref: _Optional[_Union[RecordRef, _Mapping]] = ..., annotations: _Optional[_Mapping[str, str]] = ..., created_at: _Optional[str] = ..., data: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ...) -> None: ... + referrer_ref: _referrer_pb2.ReferrerRef + def __init__(self, type: _Optional[str] = ..., record_ref: _Optional[_Union[RecordRef, _Mapping]] = ..., annotations: _Optional[_Mapping[str, str]] = ..., created_at: _Optional[str] = ..., data: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., referrer_ref: _Optional[_Union[_referrer_pb2.ReferrerRef, _Mapping]] = ...) -> None: ... diff --git a/sdk/dir-py/agntcy/dir/store/v1/store_service_pb2.py b/sdk/dir-py/agntcy/dir/store/v1/store_service_pb2.py index 3218d657f..6917ef560 100644 --- a/sdk/dir-py/agntcy/dir/store/v1/store_service_pb2.py +++ b/sdk/dir-py/agntcy/dir/store/v1/store_service_pb2.py @@ -29,7 +29,7 @@ from buf.validate import validate_pb2 as buf_dot_validate_dot_validate__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\'agntcy/dir/store/v1/store_service.proto\x12\x13\x61gntcy.dir.store.v1\x1a\x1f\x61gntcy/dir/core/v1/record.proto\x1a!agntcy/dir/core/v1/referrer.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1b\x62uf/validate/validate.proto\"\x9e\x03\n\x13PushReferrerRequest\x12\x44\n\nrecord_ref\x18\x01 \x01(\x0b\x32\x1d.agntcy.dir.core.v1.RecordRefB\x06\xbaH\x03\xc8\x01\x01R\trecordRef\x12X\n\x04type\x18\x02 \x01(\tBD\xbaHAr\n\x10\x41nnotationsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\"\xb0\x01\n\x14PushReferrerResponse\x12\x18\n\x07success\x18\x01 \x01(\x08R\x07success\x12(\n\rerror_message\x18\x02 \x01(\tH\x00R\x0c\x65rrorMessage\x88\x01\x01\x12\x42\n\x0creferrer_ref\x18\x03 \x01(\x0b\x32\x1f.agntcy.dir.core.v1.ReferrerRefR\x0breferrerRefB\x10\n\x0e_error_message\"\x8f\x01\n\x13PullReferrerRequest\x12<\n\nrecord_ref\x18\x01 \x01(\x0b\x32\x1d.agntcy.dir.core.v1.RecordRefR\trecordRef\x12(\n\rreferrer_type\x18\x02 \x01(\tH\x00R\x0creferrerType\x88\x01\x01\x42\x10\n\x0e_referrer_type\"V\n\x14PullReferrerResponse\x12>\n\x08referrer\x18\x01 \x01(\x0b\x32\".agntcy.dir.core.v1.RecordReferrerR\x08referrer2\xfe\x03\n\x0cStoreService\x12\x45\n\x04Push\x12\x1a.agntcy.dir.core.v1.Record\x1a\x1d.agntcy.dir.core.v1.RecordRef(\x01\x30\x01\x12\x45\n\x04Pull\x12\x1d.agntcy.dir.core.v1.RecordRef\x1a\x1a.agntcy.dir.core.v1.Record(\x01\x30\x01\x12K\n\x06Lookup\x12\x1d.agntcy.dir.core.v1.RecordRef\x1a\x1e.agntcy.dir.core.v1.RecordMeta(\x01\x30\x01\x12\x41\n\x06\x44\x65lete\x12\x1d.agntcy.dir.core.v1.RecordRef\x1a\x16.google.protobuf.Empty(\x01\x12g\n\x0cPushReferrer\x12(.agntcy.dir.store.v1.PushReferrerRequest\x1a).agntcy.dir.store.v1.PushReferrerResponse(\x01\x30\x01\x12g\n\x0cPullReferrer\x12(.agntcy.dir.store.v1.PullReferrerRequest\x1a).agntcy.dir.store.v1.PullReferrerResponse(\x01\x30\x01\x42\xbf\x01\n\x17\x63om.agntcy.dir.store.v1B\x11StoreServiceProtoP\x01Z\"github.com/agntcy/dir/api/store/v1\xa2\x02\x03\x41\x44S\xaa\x02\x13\x41gntcy.Dir.Store.V1\xca\x02\x13\x41gntcy\\Dir\\Store\\V1\xe2\x02\x1f\x41gntcy\\Dir\\Store\\V1\\GPBMetadata\xea\x02\x16\x41gntcy::Dir::Store::V1b\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\'agntcy/dir/store/v1/store_service.proto\x12\x13\x61gntcy.dir.store.v1\x1a\x1f\x61gntcy/dir/core/v1/record.proto\x1a!agntcy/dir/core/v1/referrer.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1b\x62uf/validate/validate.proto\"\x9e\x03\n\x13PushReferrerRequest\x12\x44\n\nrecord_ref\x18\x01 \x01(\x0b\x32\x1d.agntcy.dir.core.v1.RecordRefB\x06\xbaH\x03\xc8\x01\x01R\trecordRef\x12X\n\x04type\x18\x02 \x01(\tBD\xbaHAr\n\x10\x41nnotationsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\"\xb0\x01\n\x14PushReferrerResponse\x12\x18\n\x07success\x18\x01 \x01(\x08R\x07success\x12(\n\rerror_message\x18\x02 \x01(\tH\x00R\x0c\x65rrorMessage\x88\x01\x01\x12\x42\n\x0creferrer_ref\x18\x03 \x01(\x0b\x32\x1f.agntcy.dir.core.v1.ReferrerRefR\x0breferrerRefB\x10\n\x0e_error_message\"\x8f\x01\n\x13PullReferrerRequest\x12<\n\nrecord_ref\x18\x01 \x01(\x0b\x32\x1d.agntcy.dir.core.v1.RecordRefR\trecordRef\x12(\n\rreferrer_type\x18\x02 \x01(\tH\x00R\x0creferrerType\x88\x01\x01\x42\x10\n\x0e_referrer_type\"V\n\x14PullReferrerResponse\x12>\n\x08referrer\x18\x01 \x01(\x0b\x32\".agntcy.dir.core.v1.RecordReferrerR\x08referrer\"\xd6\x01\n\x15\x44\x65leteReferrerRequest\x12=\n\x06record\x18\x01 \x01(\x0b\x32\x1d.agntcy.dir.core.v1.RecordRefB\x06\xbaH\x03\xc8\x01\x01R\x06record\x12\x42\n\x0creferrer_ref\x18\x02 \x01(\x0b\x32\x1f.agntcy.dir.core.v1.ReferrerRefR\x0breferrerRef\x12(\n\rreferrer_type\x18\x03 \x01(\tH\x00R\x0creferrerType\x88\x01\x01\x42\x10\n\x0e_referrer_type\"^\n\x16\x44\x65leteReferrerResponse\x12\x44\n\rreferrer_refs\x18\x01 \x03(\x0b\x32\x1f.agntcy.dir.core.v1.ReferrerRefR\x0creferrerRefs2\xed\x04\n\x0cStoreService\x12\x45\n\x04Push\x12\x1a.agntcy.dir.core.v1.Record\x1a\x1d.agntcy.dir.core.v1.RecordRef(\x01\x30\x01\x12\x45\n\x04Pull\x12\x1d.agntcy.dir.core.v1.RecordRef\x1a\x1a.agntcy.dir.core.v1.Record(\x01\x30\x01\x12K\n\x06Lookup\x12\x1d.agntcy.dir.core.v1.RecordRef\x1a\x1e.agntcy.dir.core.v1.RecordMeta(\x01\x30\x01\x12\x41\n\x06\x44\x65lete\x12\x1d.agntcy.dir.core.v1.RecordRef\x1a\x16.google.protobuf.Empty(\x01\x12g\n\x0cPushReferrer\x12(.agntcy.dir.store.v1.PushReferrerRequest\x1a).agntcy.dir.store.v1.PushReferrerResponse(\x01\x30\x01\x12g\n\x0cPullReferrer\x12(.agntcy.dir.store.v1.PullReferrerRequest\x1a).agntcy.dir.store.v1.PullReferrerResponse(\x01\x30\x01\x12m\n\x0e\x44\x65leteReferrer\x12*.agntcy.dir.store.v1.DeleteReferrerRequest\x1a+.agntcy.dir.store.v1.DeleteReferrerResponse(\x01\x30\x01\x42\xbf\x01\n\x17\x63om.agntcy.dir.store.v1B\x11StoreServiceProtoP\x01Z\"github.com/agntcy/dir/api/store/v1\xa2\x02\x03\x41\x44S\xaa\x02\x13\x41gntcy.Dir.Store.V1\xca\x02\x13\x41gntcy\\Dir\\Store\\V1\xe2\x02\x1f\x41gntcy\\Dir\\Store\\V1\\GPBMetadata\xea\x02\x16\x41gntcy::Dir::Store::V1b\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -43,6 +43,8 @@ _globals['_PUSHREFERRERREQUEST'].fields_by_name['record_ref']._serialized_options = b'\272H\003\310\001\001' _globals['_PUSHREFERRERREQUEST'].fields_by_name['type']._loaded_options = None _globals['_PUSHREFERRERREQUEST'].fields_by_name['type']._serialized_options = b'\272HAr None: ... + +class DeleteReferrerRequest(_message.Message): + __slots__ = ("record", "referrer_ref", "referrer_type") + RECORD_FIELD_NUMBER: _ClassVar[int] + REFERRER_REF_FIELD_NUMBER: _ClassVar[int] + REFERRER_TYPE_FIELD_NUMBER: _ClassVar[int] + record: _record_pb2.RecordRef + referrer_ref: _referrer_pb2.ReferrerRef + referrer_type: str + def __init__(self, record: _Optional[_Union[_record_pb2.RecordRef, _Mapping]] = ..., referrer_ref: _Optional[_Union[_referrer_pb2.ReferrerRef, _Mapping]] = ..., referrer_type: _Optional[str] = ...) -> None: ... + +class DeleteReferrerResponse(_message.Message): + __slots__ = ("referrer_refs",) + REFERRER_REFS_FIELD_NUMBER: _ClassVar[int] + referrer_refs: _containers.RepeatedCompositeFieldContainer[_referrer_pb2.ReferrerRef] + def __init__(self, referrer_refs: _Optional[_Iterable[_Union[_referrer_pb2.ReferrerRef, _Mapping]]] = ...) -> None: ... diff --git a/sdk/dir-py/agntcy/dir/store/v1/store_service_pb2_grpc.py b/sdk/dir-py/agntcy/dir/store/v1/store_service_pb2_grpc.py index c5586ddd9..b3d6c26d3 100644 --- a/sdk/dir-py/agntcy/dir/store/v1/store_service_pb2_grpc.py +++ b/sdk/dir-py/agntcy/dir/store/v1/store_service_pb2_grpc.py @@ -61,6 +61,11 @@ def __init__(self, channel): request_serializer=agntcy_dot_dir_dot_store_dot_v1_dot_store__service__pb2.PullReferrerRequest.SerializeToString, response_deserializer=agntcy_dot_dir_dot_store_dot_v1_dot_store__service__pb2.PullReferrerResponse.FromString, _registered_method=True) + self.DeleteReferrer = channel.stream_stream( + '/agntcy.dir.store.v1.StoreService/DeleteReferrer', + request_serializer=agntcy_dot_dir_dot_store_dot_v1_dot_store__service__pb2.DeleteReferrerRequest.SerializeToString, + response_deserializer=agntcy_dot_dir_dot_store_dot_v1_dot_store__service__pb2.DeleteReferrerResponse.FromString, + _registered_method=True) class StoreServiceServicer(object): @@ -123,6 +128,13 @@ def PullReferrer(self, request_iterator, context): context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') + def DeleteReferrer(self, request_iterator, context): + """DeleteReferrer performs delete operation for record referrers. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + def add_StoreServiceServicer_to_server(servicer, server): rpc_method_handlers = { @@ -156,6 +168,11 @@ def add_StoreServiceServicer_to_server(servicer, server): request_deserializer=agntcy_dot_dir_dot_store_dot_v1_dot_store__service__pb2.PullReferrerRequest.FromString, response_serializer=agntcy_dot_dir_dot_store_dot_v1_dot_store__service__pb2.PullReferrerResponse.SerializeToString, ), + 'DeleteReferrer': grpc.stream_stream_rpc_method_handler( + servicer.DeleteReferrer, + request_deserializer=agntcy_dot_dir_dot_store_dot_v1_dot_store__service__pb2.DeleteReferrerRequest.FromString, + response_serializer=agntcy_dot_dir_dot_store_dot_v1_dot_store__service__pb2.DeleteReferrerResponse.SerializeToString, + ), } generic_handler = grpc.method_handlers_generic_handler( 'agntcy.dir.store.v1.StoreService', rpc_method_handlers) @@ -343,3 +360,30 @@ def PullReferrer(request_iterator, timeout, metadata, _registered_method=True) + + @staticmethod + def DeleteReferrer(request_iterator, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.stream_stream( + request_iterator, + target, + '/agntcy.dir.store.v1.StoreService/DeleteReferrer', + agntcy_dot_dir_dot_store_dot_v1_dot_store__service__pb2.DeleteReferrerRequest.SerializeToString, + agntcy_dot_dir_dot_store_dot_v1_dot_store__service__pb2.DeleteReferrerResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) diff --git a/server/controller/store.go b/server/controller/store.go index f9345655d..92302b73a 100644 --- a/server/controller/store.go +++ b/server/controller/store.go @@ -438,3 +438,49 @@ func extractRecordInfo(record *corev1.Record) (string, string) { return name, version } + +func (s storeCtrl) DeleteReferrer(stream storev1.StoreService_DeleteReferrerServer) error { + storeLogger.Debug("Called store controller's DeleteReferrer method") + + refStore, ok := s.store.(types.ReferrerStoreAPI) + if !ok { + return status.Errorf(codes.Internal, "referrer storage not supported by current store implementation") + } + + for { + request, err := stream.Recv() + if errors.Is(err, io.EOF) { + storeLogger.Debug("DeleteReferrer stream completed") + + return nil + } + + if err != nil { + return status.Errorf(codes.Internal, "failed to receive delete referrer request: %v", err) + } + + if err = protovalidate.Validate(request); err != nil { + return status.Errorf(codes.InvalidArgument, "%v", err) + } + + recordCID := request.GetRecord().GetCid() + referrerCID := request.GetReferrerRef().GetCid() + referrerType := request.GetReferrerType() + + cids, err := refStore.DeleteReferrer(stream.Context(), recordCID, referrerCID, referrerType) + if err != nil { + return err + } + + result := []*corev1.ReferrerRef{} + + for _, cid := range cids { + result = append(result, &corev1.ReferrerRef{Cid: cid}) + } + + response := storev1.DeleteReferrerResponse{ReferrerRefs: result} + if err := stream.Send(&response); err != nil { + return status.Errorf(codes.Internal, "failed to send record reference: %v", err) + } + } +} diff --git a/server/store/eventswrap/eventswrap.go b/server/store/eventswrap/eventswrap.go index defa53a6b..9014fa699 100644 --- a/server/store/eventswrap/eventswrap.go +++ b/server/store/eventswrap/eventswrap.go @@ -126,3 +126,15 @@ func (s *eventsStore) WalkReferrers(ctx context.Context, recordCID string, refer //nolint:wrapcheck return referrerStore.WalkReferrers(ctx, recordCID, referrerType, walkFn) } + +func (s *eventsStore) DeleteReferrer(ctx context.Context, recordCID string, referrerCID string, referrerType string) ([]string, error) { + // Check if source supports referrer operations + referrerStore, ok := s.source.(types.ReferrerStoreAPI) + if !ok { + return nil, status.Errorf(codes.Unimplemented, "source store does not support referrer operations") + } + + // Delegate to source (no event emitted for referrer operations) + //nolint:wrapcheck + return referrerStore.DeleteReferrer(ctx, recordCID, referrerCID, referrerType) +} diff --git a/server/store/oci/internal.go b/server/store/oci/internal.go index db6e72304..e11d0273e 100644 --- a/server/store/oci/internal.go +++ b/server/store/oci/internal.go @@ -96,9 +96,7 @@ func (s *store) fetchAndParseManifestFromDescriptor(ctx context.Context, manifes // Tag cleanup functions removed - OCI registry garbage collection handles dangling tags after manifest deletion // deleteFromOCIStore handles deletion of records from an OCI store. -func (s *store) deleteFromOCIStore(ctx context.Context, ref *corev1.RecordRef) error { - cid := ref.GetCid() - +func (s *store) deleteFromOCIStore(ctx context.Context, cid string) error { store, ok := s.repo.(*oci.Store) if !ok { return status.Errorf(codes.Internal, "expected *oci.Store, got %T", s.repo) @@ -167,9 +165,7 @@ func (s *store) deleteBlobForLocalStore(ctx context.Context, cid string, store * } // deleteFromRemoteRepository handles deletion of records from a remote repository. -func (s *store) deleteFromRemoteRepository(ctx context.Context, ref *corev1.RecordRef) error { - cid := ref.GetCid() - +func (s *store) deleteFromRemoteRepository(ctx context.Context, cid string) error { repo, ok := s.repo.(*remote.Repository) if !ok { return status.Errorf(codes.Internal, "expected *remote.Repository, got %T", s.repo) diff --git a/server/store/oci/oci.go b/server/store/oci/oci.go index 6b858f1a7..0196ca4e0 100644 --- a/server/store/oci/oci.go +++ b/server/store/oci/oci.go @@ -394,9 +394,9 @@ func (s *store) Delete(ctx context.Context, ref *corev1.RecordRef) error { switch s.repo.(type) { case *oci.Store: - return s.deleteFromOCIStore(ctx, ref) + return s.deleteFromOCIStore(ctx, ref.GetCid()) case *remote.Repository: - return s.deleteFromRemoteRepository(ctx, ref) + return s.deleteFromRemoteRepository(ctx, ref.GetCid()) default: return status.Errorf(codes.FailedPrecondition, "unsupported repo type: %T", s.repo) } diff --git a/server/store/oci/referrers.go b/server/store/oci/referrers.go index ee2ab73b4..1fbe6db14 100644 --- a/server/store/oci/referrers.go +++ b/server/store/oci/referrers.go @@ -15,6 +15,8 @@ import ( "google.golang.org/grpc/status" "google.golang.org/protobuf/encoding/protojson" "oras.land/oras-go/v2" + "oras.land/oras-go/v2/content/oci" + "oras.land/oras-go/v2/registry/remote" ) var referrersLogger = logging.Logger("store/oci/referrers") @@ -253,6 +255,11 @@ func (s *store) extractReferrerFromManifest(ctx context.Context, manifestDesc oc referrer.Type = ociToAPIType(referrer.GetType()) } + referrerCID, ok := manifest.Annotations[ManifestKeyCid] + if ok { + referrer.ReferrerRef = &corev1.ReferrerRef{Cid: referrerCID} + } + return referrer, nil } @@ -270,3 +277,54 @@ func (s *store) MediaTypeReferrerMatcher(expectedMediaType string) ReferrerMatch return len(manifest.Layers) > 0 && manifest.Layers[0].MediaType == expectedMediaType } } + +func (s *store) DeleteReferrer( + ctx context.Context, + recordCID string, + referrerCID string, + referrerType string, +) ([]string, error) { + var err error + + cids := []string{} + err = s.WalkReferrers( + ctx, + recordCID, + referrerType, + func(referrer *corev1.RecordReferrer) error { + cid := referrer.GetReferrerRef().GetCid() + if referrerCID != "" && referrerCID != cid { + return nil + } + + cids = append(cids, cid) + + return nil + }, + ) + + if err != nil { + return nil, err //nolint:wrapcheck + } + + result := []string{} + + for _, cid := range cids { + switch s.repo.(type) { + case *oci.Store: + err = s.deleteFromOCIStore(ctx, cid) + case *remote.Repository: + err = s.deleteFromRemoteRepository(ctx, cid) + default: + err = status.Errorf(codes.FailedPrecondition, "unsupported repo type: %T", s.repo) + } + + if err != nil { + return result, err //nolint:wrapcheck + } + + result = append(result, cid) + } + + return result, nil +} diff --git a/server/types/store.go b/server/types/store.go index e1d4759c6..8abd136f3 100644 --- a/server/types/store.go +++ b/server/types/store.go @@ -42,6 +42,8 @@ type ReferrerStoreAPI interface { // WalkReferrers walks referrers individually for a given record CID and optional type filter WalkReferrers(ctx context.Context, recordCID string, referrerType string, walkFn func(*corev1.RecordReferrer) error) error + + DeleteReferrer(ctx context.Context, recordCID string, referrerCID string, referrerType string) ([]string, error) } // FullStore is the complete store interface with all optional capabilities. diff --git a/tests/e2e/local/10_referrers_test.go b/tests/e2e/local/10_referrers_test.go index 3d18fc7bc..1ed046eb0 100644 --- a/tests/e2e/local/10_referrers_test.go +++ b/tests/e2e/local/10_referrers_test.go @@ -8,10 +8,12 @@ import ( "crypto/rand" "crypto/rsa" "crypto/x509" + "encoding/base64" "encoding/pem" "fmt" "io" "strings" + "time" corev1 "github.com/agntcy/dir/api/core/v1" signv1 "github.com/agntcy/dir/api/sign/v1" @@ -42,6 +44,12 @@ func generatePublicKey() string { return string(pubPem) } +func generateSignature() string { + _uuid := uuid.New() + + return base64.StdEncoding.EncodeToString(_uuid[:]) +} + func generateRecord() *corev1.Record { record, err := corev1.UnmarshalRecord(testdata.ExpectedRecordV100JSON) gomega.Expect(err).NotTo(gomega.HaveOccurred()) @@ -52,7 +60,7 @@ func generateRecord() *corev1.Record { return record } -func generateReferrer() *corev1.RecordReferrer { +func generatePublicKeyReferrer() *corev1.RecordReferrer { publicKey := signv1.PublicKey{Key: generatePublicKey()} referrer, err := publicKey.MarshalReferrer() gomega.Expect(err).NotTo(gomega.HaveOccurred()) @@ -60,8 +68,38 @@ func generateReferrer() *corev1.RecordReferrer { return referrer } -func pullReferrers(c *client.Client, ctx context.Context, recordRef *corev1.RecordRef) []*corev1.RecordReferrer { - referrerType := corev1.PublicKeyReferrerType +func generateSignatureReferrer() *corev1.RecordReferrer { + signature := signv1.Signature{ + SignedAt: time.Now().UTC().Format(time.RFC3339), + Signature: generateSignature(), + Algorithm: "unknown", + } + + referrer, err := signature.MarshalReferrer() + gomega.Expect(err).NotTo(gomega.HaveOccurred()) + + return referrer +} + +func generatePushReferrerRequest( + ref *corev1.RecordRef, + referrer *corev1.RecordReferrer, +) *storev1.PushReferrerRequest { + return &storev1.PushReferrerRequest{ + RecordRef: ref, + Type: referrer.GetType(), + Annotations: referrer.GetAnnotations(), + CreatedAt: referrer.GetCreatedAt(), + Data: referrer.GetData(), + } +} + +func pullReferrers( + c *client.Client, + ctx context.Context, + recordRef *corev1.RecordRef, + referrerType string, +) []*corev1.RecordReferrer { ch, err := c.PullReferrer(ctx, &storev1.PullReferrerRequest{ RecordRef: recordRef, ReferrerType: &referrerType, @@ -82,10 +120,17 @@ func expectError(err error, code codes.Code, msg string) { e, ok := status.FromError(err) gomega.Expect(ok).To(gomega.BeTrue()) gomega.Expect(e.Code()).To(gomega.Equal(code)) - gomega.Expect(e.Message()).To(gomega.Equal( - "failed to receive push referrer response: " + - fmt.Sprintf("rpc error: code = %s desc = %s", code.String(), msg), - )) + gomega.Expect(e.Message()).To(gomega.Equal(msg)) +} + +func getPushReferrerError(desc string) string { + return "failed to receive push referrer response: " + + fmt.Sprintf("rpc error: code = InvalidArgument desc = %s", desc) +} + +func getDeleteReferrerError(desc string) string { + return "failed to receive delete referrer response: " + + fmt.Sprintf("rpc error: code = InvalidArgument desc = %s", desc) } var _ = ginkgo.Describe("Running e2e tests for referrers", func() { @@ -117,7 +162,7 @@ var _ = ginkgo.Describe("Running e2e tests for referrers", func() { }) ginkgo.It("should successfully push basic referrer", func() { - referrer := generateReferrer() + referrer := generatePublicKeyReferrer() response, err := c.PushReferrer(ctx, &storev1.PushReferrerRequest{ RecordRef: record1, Type: referrer.GetType(), @@ -132,7 +177,7 @@ var _ = ginkgo.Describe("Running e2e tests for referrers", func() { gomega.Expect(response.GetReferrerRef().GetCid()).NotTo(gomega.BeNil()) gomega.Expect(response.GetReferrerRef().GetCid()).NotTo(gomega.BeEmpty()) - referrers := pullReferrers(c, ctx, record1) + referrers := pullReferrers(c, ctx, record1, corev1.PublicKeyReferrerType) gomega.Expect(referrers).To(gomega.HaveLen(1)) gomega.Expect(referrers[0].GetRecordRef().GetCid()).To(gomega.Equal(record1.GetCid())) gomega.Expect(referrers[0].GetType()).To(gomega.Equal(corev1.PublicKeyReferrerType)) @@ -142,7 +187,7 @@ var _ = ginkgo.Describe("Running e2e tests for referrers", func() { }) ginkgo.It("should successfully push full referrer", func() { - referrer := generateReferrer() + referrer := generatePublicKeyReferrer() referrer.CreatedAt = "2026-03-09T14:20:00Z" referrer.RecordRef = record1 referrer.Annotations = map[string]string{"foo": "bar"} @@ -172,7 +217,7 @@ var _ = ginkgo.Describe("Running e2e tests for referrers", func() { gomega.Expect(err).NotTo(gomega.HaveOccurred()) gomega.Expect(cid).To(gomega.Equal(expectedCID)) - referrers := pullReferrers(c, ctx, record1) + referrers := pullReferrers(c, ctx, record1, corev1.PublicKeyReferrerType) gomega.Expect(referrers).To(gomega.HaveLen(1)) gomega.Expect(referrers[0].GetRecordRef().GetCid()).To(gomega.Equal(record1.GetCid())) gomega.Expect(referrers[0].GetType()).To(gomega.Equal(corev1.PublicKeyReferrerType)) @@ -182,7 +227,7 @@ var _ = ginkgo.Describe("Running e2e tests for referrers", func() { }) ginkgo.It("should pass if referrer exists", func() { - referrer := generateReferrer() + referrer := generatePublicKeyReferrer() response1, err := c.PushReferrer(ctx, &storev1.PushReferrerRequest{ RecordRef: record1, @@ -210,12 +255,12 @@ var _ = ginkgo.Describe("Running e2e tests for referrers", func() { cid2 := response2.GetReferrerRef().GetCid() gomega.Expect(cid2).To(gomega.Equal(cid1)) - referrers := pullReferrers(c, ctx, record1) + referrers := pullReferrers(c, ctx, record1, corev1.PublicKeyReferrerType) gomega.Expect(referrers).To(gomega.HaveLen(1)) }) ginkgo.It("should pass if same referrer different records", func() { - referrer := generateReferrer() + referrer := generatePublicKeyReferrer() response1, err := c.PushReferrer(ctx, &storev1.PushReferrerRequest{ RecordRef: record1, @@ -245,10 +290,10 @@ var _ = ginkgo.Describe("Running e2e tests for referrers", func() { gomega.Expect(cid1).ToNot(gomega.Equal(cid2)) - referrers1 := pullReferrers(c, ctx, record1) + referrers1 := pullReferrers(c, ctx, record1, corev1.PublicKeyReferrerType) gomega.Expect(referrers1).To(gomega.HaveLen(1)) - referrers2 := pullReferrers(c, ctx, record2) + referrers2 := pullReferrers(c, ctx, record2, corev1.PublicKeyReferrerType) gomega.Expect(referrers2).To(gomega.HaveLen(1)) }) @@ -259,7 +304,7 @@ var _ = ginkgo.Describe("Running e2e tests for referrers", func() { push, err := c.StoreServiceClient.PushReferrer(ctx) gomega.Expect(err).ToNot(gomega.HaveOccurred()) - referrer1 := generateReferrer() + referrer1 := generatePublicKeyReferrer() referrer1.Annotations = map[string]string{"test_id": "1"} err = push.Send(&storev1.PushReferrerRequest{ RecordRef: record1, @@ -270,7 +315,7 @@ var _ = ginkgo.Describe("Running e2e tests for referrers", func() { }) gomega.Expect(err).ToNot(gomega.HaveOccurred()) - referrer2 := generateReferrer() + referrer2 := generatePublicKeyReferrer() referrer2.Annotations = map[string]string{"test_id": "2"} err = push.Send(&storev1.PushReferrerRequest{ RecordRef: record2, @@ -364,9 +409,9 @@ var _ = ginkgo.Describe("Running e2e tests for referrers", func() { ginkgo.Entry( "empty", &storev1.PushReferrerRequest{}, - "validation errors:\n"+ + getPushReferrerError("validation errors:\n"+ " - record_ref: value is required\n"+ - " - type: value is required", + " - type: value is required"), ), ginkgo.Entry( "record_ref: nil", @@ -374,7 +419,7 @@ var _ = ginkgo.Describe("Running e2e tests for referrers", func() { RecordRef: nil, Type: corev1.PublicKeyReferrerType, }, - "validation error: record_ref: value is required", + getPushReferrerError("validation error: record_ref: value is required"), ), ginkgo.Entry( "record_ref: empty", @@ -382,7 +427,7 @@ var _ = ginkgo.Describe("Running e2e tests for referrers", func() { RecordRef: &corev1.RecordRef{}, Type: corev1.PublicKeyReferrerType, }, - "validation error: record_ref.cid: value is required", + getPushReferrerError("validation error: record_ref.cid: value is required"), ), ginkgo.Entry( "record_ref: \"\"", @@ -390,7 +435,7 @@ var _ = ginkgo.Describe("Running e2e tests for referrers", func() { RecordRef: &corev1.RecordRef{Cid: ""}, Type: corev1.PublicKeyReferrerType, }, - "validation error: record_ref.cid: value is required", + getPushReferrerError("validation error: record_ref.cid: value is required"), ), ginkgo.Entry( "record_ref: too long", @@ -398,7 +443,7 @@ var _ = ginkgo.Describe("Running e2e tests for referrers", func() { RecordRef: &corev1.RecordRef{Cid: strings.Repeat("x", 129)}, Type: corev1.PublicKeyReferrerType, }, - "validation error: record_ref.cid: value length must be at most 128 characters", + getPushReferrerError("validation error: record_ref.cid: value length must be at most 128 characters"), ), ginkgo.Entry( "type: invalid", @@ -406,8 +451,183 @@ var _ = ginkgo.Describe("Running e2e tests for referrers", func() { RecordRef: &corev1.RecordRef{Cid: "foo"}, Type: "bar", }, - "validation error: type: value must be in list "+ - "[agntcy.dir.sign.v1.PublicKey, agntcy.dir.sign.v1.Signature]", + getPushReferrerError("validation error: type: value must be in list "+ + "[agntcy.dir.sign.v1.PublicKey, agntcy.dir.sign.v1.Signature]"), + ), + ) +}) + +var _ = ginkgo.Describe("DeleteReferrer", func() { + var ( + c *client.Client + ctx context.Context + record1 *corev1.RecordRef + record2 *corev1.RecordRef + referrer1 *corev1.ReferrerRef + referrer2 *corev1.ReferrerRef + referrer3 *corev1.ReferrerRef + referrer4 *corev1.ReferrerRef + ) + + ginkgo.BeforeEach(func() { + var err error + + ctx = context.Background() + + c, err = client.New(ctx, client.WithEnvConfig()) + gomega.Expect(err).NotTo(gomega.HaveOccurred()) + + record1, err = c.Push(ctx, generateRecord()) + gomega.Expect(err).NotTo(gomega.HaveOccurred()) + + record2, err = c.Push(ctx, generateRecord()) + gomega.Expect(err).NotTo(gomega.HaveOccurred()) + + response1, err := c.PushReferrer(ctx, generatePushReferrerRequest(record1, generatePublicKeyReferrer())) + gomega.Expect(err).NotTo(gomega.HaveOccurred()) + + referrer1 = response1.GetReferrerRef() + + response2, err := c.PushReferrer(ctx, generatePushReferrerRequest(record1, generatePublicKeyReferrer())) + gomega.Expect(err).NotTo(gomega.HaveOccurred()) + + referrer2 = response2.GetReferrerRef() + + response3, err := c.PushReferrer(ctx, generatePushReferrerRequest(record1, generateSignatureReferrer())) + gomega.Expect(err).NotTo(gomega.HaveOccurred()) + + referrer3 = response3.GetReferrerRef() + + response4, err := c.PushReferrer(ctx, generatePushReferrerRequest(record2, generatePublicKeyReferrer())) + gomega.Expect(err).NotTo(gomega.HaveOccurred()) + + referrer4 = response4.GetReferrerRef() + }) + + ginkgo.It("by record CID", func() { + response1, err := c.DeleteReferrer(ctx, &storev1.DeleteReferrerRequest{ + Record: &corev1.RecordRef{Cid: record1.GetCid()}, + }) + + gomega.Expect(err).ToNot(gomega.HaveOccurred()) + gomega.Expect(response1.GetReferrerRefs()).To(gomega.HaveLen(3)) + gomega.Expect(response1.GetReferrerRefs()[0].GetCid()).To(gomega.Equal(referrer1.GetCid())) + gomega.Expect(response1.GetReferrerRefs()[1].GetCid()).To(gomega.Equal(referrer2.GetCid())) + gomega.Expect(response1.GetReferrerRefs()[2].GetCid()).To(gomega.Equal(referrer3.GetCid())) + + referrers1 := pullReferrers(c, ctx, record1, "") + gomega.Expect(referrers1).To(gomega.BeEmpty()) + + referrers2 := pullReferrers(c, ctx, record2, "") + gomega.Expect(referrers2).To(gomega.HaveLen(1)) + gomega.Expect(referrers2[0].GetReferrerRef().GetCid()).To(gomega.Equal(referrer4.GetCid())) + + response2, err := c.DeleteReferrer(ctx, &storev1.DeleteReferrerRequest{ + Record: &corev1.RecordRef{Cid: record2.GetCid()}, + }) + + gomega.Expect(err).ToNot(gomega.HaveOccurred()) + gomega.Expect(response2.GetReferrerRefs()).To(gomega.HaveLen(1)) + gomega.Expect(response2.GetReferrerRefs()[0].GetCid()).To(gomega.Equal(referrer4.GetCid())) + + referrers1 = pullReferrers(c, ctx, record1, "") + gomega.Expect(referrers1).To(gomega.BeEmpty()) + + referrers2 = pullReferrers(c, ctx, record2, "") + gomega.Expect(referrers2).To(gomega.BeEmpty()) + }) + + ginkgo.It("by referrer type", func() { + response1, err := c.DeleteReferrer(ctx, &storev1.DeleteReferrerRequest{ + Record: &corev1.RecordRef{Cid: record1.GetCid()}, + ReferrerType: new(corev1.PublicKeyReferrerType), + }) + + gomega.Expect(err).ToNot(gomega.HaveOccurred()) + gomega.Expect(response1.GetReferrerRefs()).To(gomega.HaveLen(2)) + gomega.Expect(response1.GetReferrerRefs()[0].GetCid()).To(gomega.Equal(referrer1.GetCid())) + gomega.Expect(response1.GetReferrerRefs()[1].GetCid()).To(gomega.Equal(referrer2.GetCid())) + + referrers1 := pullReferrers(c, ctx, record1, "") + gomega.Expect(referrers1).To(gomega.HaveLen(1)) + gomega.Expect(referrers1[0].GetReferrerRef().GetCid()).To(gomega.Equal(referrer3.GetCid())) + + referrers2 := pullReferrers(c, ctx, record2, "") + gomega.Expect(referrers2).To(gomega.HaveLen(1)) + gomega.Expect(referrers2[0].GetReferrerRef().GetCid()).To(gomega.Equal(referrer4.GetCid())) + + response2, err := c.DeleteReferrer(ctx, &storev1.DeleteReferrerRequest{ + Record: &corev1.RecordRef{Cid: record1.GetCid()}, + ReferrerType: new(corev1.SignatureReferrerType), + }) + + gomega.Expect(err).ToNot(gomega.HaveOccurred()) + gomega.Expect(response2.GetReferrerRefs()).To(gomega.HaveLen(1)) + gomega.Expect(response2.GetReferrerRefs()[0].GetCid()).To(gomega.Equal(referrer3.GetCid())) + + referrers1 = pullReferrers(c, ctx, record1, "") + gomega.Expect(referrers1).To(gomega.BeEmpty()) + + referrers2 = pullReferrers(c, ctx, record2, "") + gomega.Expect(referrers2).To(gomega.HaveLen(1)) + gomega.Expect(referrers2[0].GetReferrerRef().GetCid()).To(gomega.Equal(referrer4.GetCid())) + }) + + ginkgo.It("by referrer CID", func() { + response1, err := c.DeleteReferrer(ctx, &storev1.DeleteReferrerRequest{ + Record: &corev1.RecordRef{Cid: record1.GetCid()}, + ReferrerRef: &corev1.ReferrerRef{Cid: referrer1.GetCid()}, + }) + + gomega.Expect(err).ToNot(gomega.HaveOccurred()) + gomega.Expect(response1.GetReferrerRefs()).To(gomega.HaveLen(1)) + gomega.Expect(response1.GetReferrerRefs()[0].GetCid()).To(gomega.Equal(referrer1.GetCid())) + + referrers1 := pullReferrers(c, ctx, record1, "") + gomega.Expect(referrers1).To(gomega.HaveLen(2)) + gomega.Expect(referrers1[0].GetReferrerRef().GetCid()).To(gomega.Equal(referrer2.GetCid())) + gomega.Expect(referrers1[1].GetReferrerRef().GetCid()).To(gomega.Equal(referrer3.GetCid())) + + referrers2 := pullReferrers(c, ctx, record2, "") + gomega.Expect(referrers2).To(gomega.HaveLen(1)) + gomega.Expect(referrers2[0].GetReferrerRef().GetCid()).To(gomega.Equal(referrer4.GetCid())) + }) + + ginkgo.It("by referrer type & referrer CID", func() { + response1, err := c.DeleteReferrer(ctx, &storev1.DeleteReferrerRequest{ + Record: &corev1.RecordRef{Cid: record1.GetCid()}, + ReferrerRef: &corev1.ReferrerRef{Cid: referrer2.GetCid()}, + ReferrerType: new(corev1.PublicKeyReferrerType), + }) + + gomega.Expect(err).ToNot(gomega.HaveOccurred()) + gomega.Expect(response1.GetReferrerRefs()).To(gomega.HaveLen(1)) + gomega.Expect(response1.GetReferrerRefs()[0].GetCid()).To(gomega.Equal(referrer2.GetCid())) + + referrers1 := pullReferrers(c, ctx, record1, "") + gomega.Expect(referrers1).To(gomega.HaveLen(2)) + gomega.Expect(referrers1[0].GetReferrerRef().GetCid()).To(gomega.Equal(referrer1.GetCid())) + gomega.Expect(referrers1[1].GetReferrerRef().GetCid()).To(gomega.Equal(referrer3.GetCid())) + + referrers2 := pullReferrers(c, ctx, record2, "") + gomega.Expect(referrers2).To(gomega.HaveLen(1)) + gomega.Expect(referrers2[0].GetReferrerRef().GetCid()).To(gomega.Equal(referrer4.GetCid())) + }) + + ginkgo.DescribeTable("validation errors", + func(request *storev1.DeleteReferrerRequest, msg string) { + _, err := c.DeleteReferrer(ctx, request) + expectError(err, codes.InvalidArgument, msg) + }, + ginkgo.Entry( + "empty", + &storev1.DeleteReferrerRequest{}, + getDeleteReferrerError("validation error: record: value is required"), + ), + ginkgo.Entry( + "record_ref: empty", + &storev1.DeleteReferrerRequest{Record: &corev1.RecordRef{}}, + getDeleteReferrerError("validation error: record.cid: value is required"), ), ) })