From 5fa9a47708977e2d4eaa3f3f73545c3d977260fb Mon Sep 17 00:00:00 2001 From: Kevin Szuchet <31735779+kevinszuchet@users.noreply.github.com> Date: Thu, 16 Jan 2025 14:28:33 -0300 Subject: [PATCH 1/4] feat: Social service E@ new payloads and responses (#238) * feat: GetFriends with pagination and filter by status * feat: Get Friendship Requests with pagination * feat: Add optional pagination to GetMutualFriends * feat: Upsert Friendship Response has data about the frienship * feat: Add new endpoint to retrieve the status of a friendship * refactor: Only send id and timestamps on upsert response * feat: New version of the same service to avoid breaking changes * refactor: Get F Status response * feat: Distinguish request status * feat: Add pagination data in the response of the paginated rpc calls * fix: Better versioning of social service * fix: Re add previous missing files * chore: missing eof * refactor: new service is v3, original one is v1 * chore: comments * feat: Remove stream return from Get Friends and MutualFriends --- .../social_service/v1/social_service.proto | 163 ++++++++++++++++++ .../social_service/v2/social_service.proto | 112 ++++++++++++ .../social_service/v3/social_service.proto | 159 +++++++++++++++++ .../social_service_v2/social_service.proto | 1 + public/social_service.proto | 4 + 5 files changed, 439 insertions(+) create mode 100644 proto/decentraland/social_service/v1/social_service.proto create mode 100644 proto/decentraland/social_service/v2/social_service.proto create mode 100644 proto/decentraland/social_service/v3/social_service.proto create mode 100644 public/social_service.proto diff --git a/proto/decentraland/social_service/v1/social_service.proto b/proto/decentraland/social_service/v1/social_service.proto new file mode 100644 index 00000000..2a0cf2ab --- /dev/null +++ b/proto/decentraland/social_service/v1/social_service.proto @@ -0,0 +1,163 @@ +syntax = "proto3"; +package decentraland.social_service.v1; + +// This message is a response that is sent from the server to the client +message FriendshipEventResponse { + oneof body { + RequestResponse request = 1; + AcceptResponse accept = 2; + RejectResponse reject = 4; + DeleteResponse delete = 5; + CancelResponse cancel = 6; + } +} + +message FriendshipEventResponses { + repeated FriendshipEventResponse responses = 1; +} + +message FriendshipEventPayload { + oneof body { + RequestPayload request = 1; + AcceptPayload accept = 2; + RejectPayload reject = 4; + DeletePayload delete = 5; + CancelPayload cancel = 6; + } +} + +message User { string address = 1; } + +message Users { repeated User users = 1; } + +message RequestResponse { + User user = 1; + int64 created_at = 2; + optional string message = 3; +} + +message RequestPayload { + User user = 1; + optional string message = 3; +} + +message Requests { + int64 total = 1; // Total amount of friendship requests + repeated RequestResponse items = 2; +} + +message RequestEvents { + Requests outgoing = 1; // Requests the authed user have sent to users + Requests incoming = 2; // Requests the authed user have received from users +} + +message AcceptResponse { User user = 1; } + +message AcceptPayload { User user = 1; } + +message RejectResponse { User user = 1; } + +message RejectPayload { User user = 1; } + +message DeleteResponse { User user = 1; } + +message DeletePayload { User user = 1; } + +message CancelResponse { User user = 1; } + +message CancelPayload { User user = 1; } + +message UpdateFriendshipPayload { + FriendshipEventPayload event = 1; + // For internal use only, subject to change. + optional Payload auth_token = 2; +} + +message MutualFriendsPayload { + User user = 1; + // For internal use only, subject to change. + optional Payload auth_token = 2; +} + +message Payload { + // For internal use only, subject to change. + optional string synapse_token = 1; +} + +message BadRequestError { + string message = 1; +} +message UnauthorizedError { + string message = 1; +} +message ForbiddenError { + string message = 1; +} +message TooManyRequestsError { + string message = 1; +} +message InternalServerError { + string message = 1; +} + +message UsersResponse { + oneof response { + Users users = 1; + InternalServerError internal_server_error = 2; + UnauthorizedError unauthorized_error = 3; + ForbiddenError forbidden_error = 4; + TooManyRequestsError too_many_requests_error = 5; + BadRequestError bad_request_error = 6; + } +} + +message RequestEventsResponse { + oneof response { + RequestEvents events = 1; + InternalServerError internal_server_error = 2; + UnauthorizedError unauthorized_error = 3; + ForbiddenError forbidden_error = 4; + TooManyRequestsError too_many_requests_error = 5; + } +} + +message UpdateFriendshipResponse { + oneof response { + FriendshipEventResponse event = 1; + InternalServerError internal_server_error = 2; + UnauthorizedError unauthorized_error = 3; + ForbiddenError forbidden_error = 4; + TooManyRequestsError too_many_requests_error = 5; + BadRequestError bad_request_error = 6; + } +} + +message SubscribeFriendshipEventsUpdatesResponse { + oneof response { + FriendshipEventResponses events = 1; + InternalServerError internal_server_error = 2; + UnauthorizedError unauthorized_error = 3; + ForbiddenError forbidden_error = 4; + TooManyRequestsError too_many_requests_error = 5; + } +} + +// @deprecated, only available for old explorer compatibility +service FriendshipsService { + // Get the list of friends for the authenticated user + rpc GetFriends(Payload) returns (stream UsersResponse) {} + + // Get the list of mutual friends between the authenticated user and the one in the parameter + rpc GetMutualFriends(MutualFriendsPayload) returns (stream UsersResponse) {} + + // Get the list of request events for the authenticated user + rpc GetRequestEvents(Payload) returns (RequestEventsResponse) {} + + // Update friendship status: REQUEST, ACCEPT, REJECT, CANCEL, DELETE + rpc UpdateFriendshipEvent(UpdateFriendshipPayload) + returns (UpdateFriendshipResponse) {} + + // Subscribe to updates of friendship status: REQUEST, ACCEPT, REJECT, CANCEL, DELETE + rpc SubscribeFriendshipEventsUpdates(Payload) + returns (stream SubscribeFriendshipEventsUpdatesResponse) {} +} diff --git a/proto/decentraland/social_service/v2/social_service.proto b/proto/decentraland/social_service/v2/social_service.proto new file mode 100644 index 00000000..cf9cbd5b --- /dev/null +++ b/proto/decentraland/social_service/v2/social_service.proto @@ -0,0 +1,112 @@ +syntax = "proto3"; +package decentraland.social_service.v2; + +import "google/protobuf/empty.proto"; + +// Errors + +message InvalidFriendshipAction {} + +message InternalServerError {} + +// Types + +message User { string address = 1; } + +message RequestResponse { + User user = 1; + int64 created_at = 2; + optional string message = 3; +} + +message RequestPayload { + User user = 1; + optional string message = 3; +} + +message Requests { + repeated RequestResponse requests = 1; +} + +message AcceptResponse { User user = 1; } + +message AcceptPayload { User user = 1; } + +message RejectResponse { User user = 1; } + +message RejectPayload { User user = 1; } + +message DeleteResponse { User user = 1; } + +message DeletePayload { User user = 1; } + +message CancelResponse { User user = 1; } + +message CancelPayload { User user = 1; } + +message UpsertFriendshipPayload { + oneof action { + RequestPayload request = 1; + AcceptPayload accept = 2; + RejectPayload reject = 4; + DeletePayload delete = 5; + CancelPayload cancel = 6; + } +} + +message MutualFriendsPayload { + User user = 1; +} + +message UsersResponse { + repeated User users = 1; +} + +message FriendshipRequestsResponse { + oneof response { + Requests requests = 1; + InternalServerError internal_server_error = 2; + } +} + +message UpsertFriendshipResponse { + message Accepted {} + oneof response { + Accepted accepted = 1; + InvalidFriendshipAction invalid_friendship_action = 2; + InternalServerError internal_server_error = 3; + } +} + +message FriendshipUpdate { + oneof update { + RequestResponse request = 1; + AcceptResponse accept = 2; + RejectResponse reject = 4; + DeleteResponse delete = 5; + CancelResponse cancel = 6; + } +} + +// @deprecated, used for initial migration without Matrix +service SocialService { + // Get the list of friends for the authenticated user + rpc GetFriends(google.protobuf.Empty) returns (stream UsersResponse) {} + + // Get the list of mutual friends between the authenticated user and the one in the parameter + rpc GetMutualFriends(MutualFriendsPayload) returns (stream UsersResponse) {} + + // Get the pending friendship requests for the authenticated user + rpc GetPendingFriendshipRequests(google.protobuf.Empty) returns (FriendshipRequestsResponse) {} + + // Get the sent friendship requests for the authenticated user + rpc GetSentFriendshipRequests(google.protobuf.Empty) returns (FriendshipRequestsResponse) {} + + // Create or update friendship status: REQUEST, ACCEPT, REJECT, CANCEL, DELETE + rpc UpsertFriendship(UpsertFriendshipPayload) + returns (UpsertFriendshipResponse) {} + + // Subscribe to updates of friendship status: REQUEST, ACCEPT, REJECT, CANCEL, DELETE + rpc SubscribeToFriendshipUpdates(google.protobuf.Empty) + returns (stream FriendshipUpdate) {} +} diff --git a/proto/decentraland/social_service/v3/social_service.proto b/proto/decentraland/social_service/v3/social_service.proto new file mode 100644 index 00000000..167b0fde --- /dev/null +++ b/proto/decentraland/social_service/v3/social_service.proto @@ -0,0 +1,159 @@ +syntax = "proto3"; +package decentraland.social_service.v3; + +import "google/protobuf/empty.proto"; + +// Errors +message InvalidFriendshipAction {} +message InternalServerError {} + +// Types +message User { string address = 1; } + +message Pagination { + int32 limit = 1; + int32 offset = 2; +} + +message FriendshipRequestResponse { + User user = 1; + int64 created_at = 2; + optional string message = 3; +} + +message FriendshipRequests { + repeated FriendshipRequestResponse requests = 1; +} + +enum ConnectivityStatus { + ONLINE = 0; + OFFLINE = 1; + AWAY = 2; +} + +message GetFriendsPayload { + optional Pagination pagination = 1; + optional ConnectivityStatus status = 2; +} + +message GetFriendshipRequestsPayload { + optional Pagination pagination = 1; +} + +message UpsertFriendshipPayload { + message RequestPayload { + User user = 1; + optional string message = 3; + } + message AcceptPayload { User user = 1; } + message RejectPayload { User user = 1; } + message DeletePayload { User user = 1; } + message CancelPayload { User user = 1; } + + oneof action { + RequestPayload request = 1; + AcceptPayload accept = 2; + RejectPayload reject = 4; + DeletePayload delete = 5; + CancelPayload cancel = 6; + } +} + +message GetMutualFriendsPayload { + User user = 1; + optional Pagination pagination = 2; +} + +message PaginatedResponse { + int32 total = 1; + int32 page = 2; +} + +message PaginatedUsersResponse { + repeated User users = 1; + PaginatedResponse pagination_data = 2; +} + +message PaginatedFriendshipRequestsResponse { + oneof response { + FriendshipRequests requests = 1; + InternalServerError internal_server_error = 2; + } + optional PaginatedResponse pagination_data = 3; +} + +message UpsertFriendshipResponse { + message Accepted { + string id = 1; + int64 created_at = 2; + } + oneof response { + Accepted accepted = 1; + InvalidFriendshipAction invalid_friendship_action = 2; + InternalServerError internal_server_error = 3; + } +} + +message FriendshipUpdate { + message AcceptResponse { User user = 1; } + message RejectResponse { User user = 1; } + message DeleteResponse { User user = 1; } + message CancelResponse { User user = 1; } + + oneof update { + FriendshipRequestResponse request = 1; + AcceptResponse accept = 2; + RejectResponse reject = 3; + DeleteResponse delete = 4; + CancelResponse cancel = 5; + } +} + +message GetFriendshipStatusPayload { + User user = 1; +} + +enum FriendshipStatus { + REQUEST_SENT = 0; + REQUEST_RECEIVED = 1; + CANCELED = 2; + ACCEPTED = 3; + REJECTED = 4; + DELETED = 5; + BLOCKED = 6; +} + +message GetFriendshipStatusResponse { + message Ok { + FriendshipStatus status = 1; + optional string message = 2; + } + oneof response { + Ok accepted = 1; + InternalServerError internal_server_error = 2; + } +} + +service SocialService { + // Get the list of friends for the authenticated user + rpc GetFriends(GetFriendsPayload) returns (PaginatedUsersResponse) {} + + // Get the list of mutual friends between the authenticated user and the one in the parameter + rpc GetMutualFriends(GetMutualFriendsPayload) returns (PaginatedUsersResponse) {} + + // Get the pending friendship requests for the authenticated user + rpc GetPendingFriendshipRequests(GetFriendshipRequestsPayload) returns (PaginatedFriendshipRequestsResponse) {} + + // Get the sent friendship requests for the authenticated user + rpc GetSentFriendshipRequests(GetFriendshipRequestsPayload) returns (PaginatedFriendshipRequestsResponse) {} + + // Create or update friendship status: REQUEST, ACCEPT, REJECT, CANCEL, DELETE + rpc UpsertFriendship(UpsertFriendshipPayload) + returns (UpsertFriendshipResponse) {} + + // Subscribe to updates of friendship status: REQUEST, ACCEPT, REJECT, CANCEL, DELETE + rpc SubscribeToFriendshipUpdates(google.protobuf.Empty) + returns (stream FriendshipUpdate) {} + + rpc GetFriendshipStatus(GetFriendshipStatusPayload) returns (GetFriendshipStatusResponse) {} +} diff --git a/proto/decentraland/social_service_v2/social_service.proto b/proto/decentraland/social_service_v2/social_service.proto index 4c0a575e..d5802e49 100644 --- a/proto/decentraland/social_service_v2/social_service.proto +++ b/proto/decentraland/social_service_v2/social_service.proto @@ -88,6 +88,7 @@ message FriendshipUpdate { } } +// @deprecated service SocialService { // Get the list of friends for the authenticated user rpc GetFriends(google.protobuf.Empty) returns (stream UsersResponse) {} diff --git a/public/social_service.proto b/public/social_service.proto new file mode 100644 index 00000000..4d1ecbb0 --- /dev/null +++ b/public/social_service.proto @@ -0,0 +1,4 @@ +syntax = "proto3"; +package decentraland.social; + +import public "decentraland/social_service/v3/social_service.proto"; From 3614eaddfefabff6842089b245fd72b9773ceca6 Mon Sep 17 00:00:00 2001 From: Kevin Szuchet <31735779+kevinszuchet@users.noreply.github.com> Date: Thu, 16 Jan 2025 16:02:18 -0300 Subject: [PATCH 2/4] fix: Avoid duplication in the definition names (#239) * fix: Avoid duplication in the definition names * fix: Change file names to avoid collisions * refactor: Undo rename --- .../v1/{social_service.proto => social_service_v1.proto} | 0 .../v2/{social_service.proto => social_service_v2.proto} | 0 .../v3/{social_service.proto => social_service_v3.proto} | 0 public/social_service.proto | 2 +- 4 files changed, 1 insertion(+), 1 deletion(-) rename proto/decentraland/social_service/v1/{social_service.proto => social_service_v1.proto} (100%) rename proto/decentraland/social_service/v2/{social_service.proto => social_service_v2.proto} (100%) rename proto/decentraland/social_service/v3/{social_service.proto => social_service_v3.proto} (100%) diff --git a/proto/decentraland/social_service/v1/social_service.proto b/proto/decentraland/social_service/v1/social_service_v1.proto similarity index 100% rename from proto/decentraland/social_service/v1/social_service.proto rename to proto/decentraland/social_service/v1/social_service_v1.proto diff --git a/proto/decentraland/social_service/v2/social_service.proto b/proto/decentraland/social_service/v2/social_service_v2.proto similarity index 100% rename from proto/decentraland/social_service/v2/social_service.proto rename to proto/decentraland/social_service/v2/social_service_v2.proto diff --git a/proto/decentraland/social_service/v3/social_service.proto b/proto/decentraland/social_service/v3/social_service_v3.proto similarity index 100% rename from proto/decentraland/social_service/v3/social_service.proto rename to proto/decentraland/social_service/v3/social_service_v3.proto diff --git a/public/social_service.proto b/public/social_service.proto index 4d1ecbb0..a23161c3 100644 --- a/public/social_service.proto +++ b/public/social_service.proto @@ -1,4 +1,4 @@ syntax = "proto3"; package decentraland.social; -import public "decentraland/social_service/v3/social_service.proto"; +import public "decentraland/social_service/v3/social_service_v3.proto"; From cbbf46cc50c01b5644752dd7d60eec3caf743ad9 Mon Sep 17 00:00:00 2001 From: Mateo Miccino Date: Tue, 21 Jan 2025 11:40:03 -0300 Subject: [PATCH 3/4] refactor: reorganize social service protos, and remove duplication (#241) * refactor: reorganize social service protos, and remove duplication * add public social service --- .../social/friendships/friendships.proto | 162 ------------------ .../social_service/v2/social_service_v2.proto | 121 +++++++++---- .../social_service/v3/social_service_v3.proto | 159 ----------------- .../social_service_v2/social_service.proto | 112 ------------ public/social.proto | 4 +- public/social_service.proto | 4 - public/social_service_v2.proto | 4 - 7 files changed, 87 insertions(+), 479 deletions(-) delete mode 100644 proto/decentraland/social/friendships/friendships.proto delete mode 100644 proto/decentraland/social_service/v3/social_service_v3.proto delete mode 100644 proto/decentraland/social_service_v2/social_service.proto delete mode 100644 public/social_service.proto delete mode 100644 public/social_service_v2.proto diff --git a/proto/decentraland/social/friendships/friendships.proto b/proto/decentraland/social/friendships/friendships.proto deleted file mode 100644 index 238e8516..00000000 --- a/proto/decentraland/social/friendships/friendships.proto +++ /dev/null @@ -1,162 +0,0 @@ -syntax = "proto3"; -package decentraland.social.friendships; - -// This message is a response that is sent from the server to the client -message FriendshipEventResponse { - oneof body { - RequestResponse request = 1; - AcceptResponse accept = 2; - RejectResponse reject = 4; - DeleteResponse delete = 5; - CancelResponse cancel = 6; - } -} - -message FriendshipEventResponses { - repeated FriendshipEventResponse responses = 1; -} - -message FriendshipEventPayload { - oneof body { - RequestPayload request = 1; - AcceptPayload accept = 2; - RejectPayload reject = 4; - DeletePayload delete = 5; - CancelPayload cancel = 6; - } -} - -message User { string address = 1; } - -message Users { repeated User users = 1; } - -message RequestResponse { - User user = 1; - int64 created_at = 2; - optional string message = 3; -} - -message RequestPayload { - User user = 1; - optional string message = 3; -} - -message Requests { - int64 total = 1; // Total amount of friendship requests - repeated RequestResponse items = 2; -} - -message RequestEvents { - Requests outgoing = 1; // Requests the authed user have sent to users - Requests incoming = 2; // Requests the authed user have received from users -} - -message AcceptResponse { User user = 1; } - -message AcceptPayload { User user = 1; } - -message RejectResponse { User user = 1; } - -message RejectPayload { User user = 1; } - -message DeleteResponse { User user = 1; } - -message DeletePayload { User user = 1; } - -message CancelResponse { User user = 1; } - -message CancelPayload { User user = 1; } - -message UpdateFriendshipPayload { - FriendshipEventPayload event = 1; - // For internal use only, subject to change. - optional Payload auth_token = 2; -} - -message MutualFriendsPayload { - User user = 1; - // For internal use only, subject to change. - optional Payload auth_token = 2; -} - -message Payload { - // For internal use only, subject to change. - optional string synapse_token = 1; -} - -message BadRequestError { - string message = 1; -} -message UnauthorizedError { - string message = 1; -} -message ForbiddenError { - string message = 1; -} -message TooManyRequestsError { - string message = 1; -} -message InternalServerError { - string message = 1; -} - -message UsersResponse { - oneof response { - Users users = 1; - InternalServerError internal_server_error = 2; - UnauthorizedError unauthorized_error = 3; - ForbiddenError forbidden_error = 4; - TooManyRequestsError too_many_requests_error = 5; - BadRequestError bad_request_error = 6; - } -} - -message RequestEventsResponse { - oneof response { - RequestEvents events = 1; - InternalServerError internal_server_error = 2; - UnauthorizedError unauthorized_error = 3; - ForbiddenError forbidden_error = 4; - TooManyRequestsError too_many_requests_error = 5; - } -} - -message UpdateFriendshipResponse { - oneof response { - FriendshipEventResponse event = 1; - InternalServerError internal_server_error = 2; - UnauthorizedError unauthorized_error = 3; - ForbiddenError forbidden_error = 4; - TooManyRequestsError too_many_requests_error = 5; - BadRequestError bad_request_error = 6; - } -} - -message SubscribeFriendshipEventsUpdatesResponse { - oneof response { - FriendshipEventResponses events = 1; - InternalServerError internal_server_error = 2; - UnauthorizedError unauthorized_error = 3; - ForbiddenError forbidden_error = 4; - TooManyRequestsError too_many_requests_error = 5; - } -} - -service FriendshipsService { - // Get the list of friends for the authenticated user - rpc GetFriends(Payload) returns (stream UsersResponse) {} - - // Get the list of mutual friends between the authenticated user and the one in the parameter - rpc GetMutualFriends(MutualFriendsPayload) returns (stream UsersResponse) {} - - // Get the list of request events for the authenticated user - rpc GetRequestEvents(Payload) returns (RequestEventsResponse) {} - - // Update friendship status: REQUEST, ACCEPT, REJECT, CANCEL, DELETE - rpc UpdateFriendshipEvent(UpdateFriendshipPayload) - returns (UpdateFriendshipResponse) {} - - // Subscribe to updates of friendship status: REQUEST, ACCEPT, REJECT, CANCEL, DELETE - rpc SubscribeFriendshipEventsUpdates(Payload) - returns (stream SubscribeFriendshipEventsUpdatesResponse) {} -} diff --git a/proto/decentraland/social_service/v2/social_service_v2.proto b/proto/decentraland/social_service/v2/social_service_v2.proto index cf9cbd5b..363ed330 100644 --- a/proto/decentraland/social_service/v2/social_service_v2.proto +++ b/proto/decentraland/social_service/v2/social_service_v2.proto @@ -4,47 +4,52 @@ package decentraland.social_service.v2; import "google/protobuf/empty.proto"; // Errors - message InvalidFriendshipAction {} - message InternalServerError {} // Types - message User { string address = 1; } -message RequestResponse { - User user = 1; - int64 created_at = 2; - optional string message = 3; +message Pagination { + int32 limit = 1; + int32 offset = 2; } -message RequestPayload { +message FriendshipRequestResponse { User user = 1; + int64 created_at = 2; optional string message = 3; } -message Requests { - repeated RequestResponse requests = 1; +message FriendshipRequests { + repeated FriendshipRequestResponse requests = 1; } -message AcceptResponse { User user = 1; } - -message AcceptPayload { User user = 1; } - -message RejectResponse { User user = 1; } - -message RejectPayload { User user = 1; } - -message DeleteResponse { User user = 1; } - -message DeletePayload { User user = 1; } +enum ConnectivityStatus { + ONLINE = 0; + OFFLINE = 1; + AWAY = 2; +} -message CancelResponse { User user = 1; } +message GetFriendsPayload { + optional Pagination pagination = 1; + optional ConnectivityStatus status = 2; +} -message CancelPayload { User user = 1; } +message GetFriendshipRequestsPayload { + optional Pagination pagination = 1; +} message UpsertFriendshipPayload { + message RequestPayload { + User user = 1; + optional string message = 3; + } + message AcceptPayload { User user = 1; } + message RejectPayload { User user = 1; } + message DeletePayload { User user = 1; } + message CancelPayload { User user = 1; } + oneof action { RequestPayload request = 1; AcceptPayload accept = 2; @@ -54,23 +59,34 @@ message UpsertFriendshipPayload { } } -message MutualFriendsPayload { +message GetMutualFriendsPayload { User user = 1; + optional Pagination pagination = 2; } -message UsersResponse { +message PaginatedResponse { + int32 total = 1; + int32 page = 2; +} + +message PaginatedUsersResponse { repeated User users = 1; + PaginatedResponse pagination_data = 2; } -message FriendshipRequestsResponse { +message PaginatedFriendshipRequestsResponse { oneof response { - Requests requests = 1; + FriendshipRequests requests = 1; InternalServerError internal_server_error = 2; } + optional PaginatedResponse pagination_data = 3; } message UpsertFriendshipResponse { - message Accepted {} + message Accepted { + string id = 1; + int64 created_at = 2; + } oneof response { Accepted accepted = 1; InvalidFriendshipAction invalid_friendship_action = 2; @@ -79,28 +95,57 @@ message UpsertFriendshipResponse { } message FriendshipUpdate { + message AcceptResponse { User user = 1; } + message RejectResponse { User user = 1; } + message DeleteResponse { User user = 1; } + message CancelResponse { User user = 1; } + oneof update { - RequestResponse request = 1; + FriendshipRequestResponse request = 1; AcceptResponse accept = 2; - RejectResponse reject = 4; - DeleteResponse delete = 5; - CancelResponse cancel = 6; + RejectResponse reject = 3; + DeleteResponse delete = 4; + CancelResponse cancel = 5; + } +} + +message GetFriendshipStatusPayload { + User user = 1; +} + +enum FriendshipStatus { + REQUEST_SENT = 0; + REQUEST_RECEIVED = 1; + CANCELED = 2; + ACCEPTED = 3; + REJECTED = 4; + DELETED = 5; + BLOCKED = 6; +} + +message GetFriendshipStatusResponse { + message Ok { + FriendshipStatus status = 1; + optional string message = 2; + } + oneof response { + Ok accepted = 1; + InternalServerError internal_server_error = 2; } } -// @deprecated, used for initial migration without Matrix service SocialService { // Get the list of friends for the authenticated user - rpc GetFriends(google.protobuf.Empty) returns (stream UsersResponse) {} + rpc GetFriends(GetFriendsPayload) returns (PaginatedUsersResponse) {} // Get the list of mutual friends between the authenticated user and the one in the parameter - rpc GetMutualFriends(MutualFriendsPayload) returns (stream UsersResponse) {} + rpc GetMutualFriends(GetMutualFriendsPayload) returns (PaginatedUsersResponse) {} // Get the pending friendship requests for the authenticated user - rpc GetPendingFriendshipRequests(google.protobuf.Empty) returns (FriendshipRequestsResponse) {} + rpc GetPendingFriendshipRequests(GetFriendshipRequestsPayload) returns (PaginatedFriendshipRequestsResponse) {} // Get the sent friendship requests for the authenticated user - rpc GetSentFriendshipRequests(google.protobuf.Empty) returns (FriendshipRequestsResponse) {} + rpc GetSentFriendshipRequests(GetFriendshipRequestsPayload) returns (PaginatedFriendshipRequestsResponse) {} // Create or update friendship status: REQUEST, ACCEPT, REJECT, CANCEL, DELETE rpc UpsertFriendship(UpsertFriendshipPayload) @@ -109,4 +154,6 @@ service SocialService { // Subscribe to updates of friendship status: REQUEST, ACCEPT, REJECT, CANCEL, DELETE rpc SubscribeToFriendshipUpdates(google.protobuf.Empty) returns (stream FriendshipUpdate) {} + + rpc GetFriendshipStatus(GetFriendshipStatusPayload) returns (GetFriendshipStatusResponse) {} } diff --git a/proto/decentraland/social_service/v3/social_service_v3.proto b/proto/decentraland/social_service/v3/social_service_v3.proto deleted file mode 100644 index 167b0fde..00000000 --- a/proto/decentraland/social_service/v3/social_service_v3.proto +++ /dev/null @@ -1,159 +0,0 @@ -syntax = "proto3"; -package decentraland.social_service.v3; - -import "google/protobuf/empty.proto"; - -// Errors -message InvalidFriendshipAction {} -message InternalServerError {} - -// Types -message User { string address = 1; } - -message Pagination { - int32 limit = 1; - int32 offset = 2; -} - -message FriendshipRequestResponse { - User user = 1; - int64 created_at = 2; - optional string message = 3; -} - -message FriendshipRequests { - repeated FriendshipRequestResponse requests = 1; -} - -enum ConnectivityStatus { - ONLINE = 0; - OFFLINE = 1; - AWAY = 2; -} - -message GetFriendsPayload { - optional Pagination pagination = 1; - optional ConnectivityStatus status = 2; -} - -message GetFriendshipRequestsPayload { - optional Pagination pagination = 1; -} - -message UpsertFriendshipPayload { - message RequestPayload { - User user = 1; - optional string message = 3; - } - message AcceptPayload { User user = 1; } - message RejectPayload { User user = 1; } - message DeletePayload { User user = 1; } - message CancelPayload { User user = 1; } - - oneof action { - RequestPayload request = 1; - AcceptPayload accept = 2; - RejectPayload reject = 4; - DeletePayload delete = 5; - CancelPayload cancel = 6; - } -} - -message GetMutualFriendsPayload { - User user = 1; - optional Pagination pagination = 2; -} - -message PaginatedResponse { - int32 total = 1; - int32 page = 2; -} - -message PaginatedUsersResponse { - repeated User users = 1; - PaginatedResponse pagination_data = 2; -} - -message PaginatedFriendshipRequestsResponse { - oneof response { - FriendshipRequests requests = 1; - InternalServerError internal_server_error = 2; - } - optional PaginatedResponse pagination_data = 3; -} - -message UpsertFriendshipResponse { - message Accepted { - string id = 1; - int64 created_at = 2; - } - oneof response { - Accepted accepted = 1; - InvalidFriendshipAction invalid_friendship_action = 2; - InternalServerError internal_server_error = 3; - } -} - -message FriendshipUpdate { - message AcceptResponse { User user = 1; } - message RejectResponse { User user = 1; } - message DeleteResponse { User user = 1; } - message CancelResponse { User user = 1; } - - oneof update { - FriendshipRequestResponse request = 1; - AcceptResponse accept = 2; - RejectResponse reject = 3; - DeleteResponse delete = 4; - CancelResponse cancel = 5; - } -} - -message GetFriendshipStatusPayload { - User user = 1; -} - -enum FriendshipStatus { - REQUEST_SENT = 0; - REQUEST_RECEIVED = 1; - CANCELED = 2; - ACCEPTED = 3; - REJECTED = 4; - DELETED = 5; - BLOCKED = 6; -} - -message GetFriendshipStatusResponse { - message Ok { - FriendshipStatus status = 1; - optional string message = 2; - } - oneof response { - Ok accepted = 1; - InternalServerError internal_server_error = 2; - } -} - -service SocialService { - // Get the list of friends for the authenticated user - rpc GetFriends(GetFriendsPayload) returns (PaginatedUsersResponse) {} - - // Get the list of mutual friends between the authenticated user and the one in the parameter - rpc GetMutualFriends(GetMutualFriendsPayload) returns (PaginatedUsersResponse) {} - - // Get the pending friendship requests for the authenticated user - rpc GetPendingFriendshipRequests(GetFriendshipRequestsPayload) returns (PaginatedFriendshipRequestsResponse) {} - - // Get the sent friendship requests for the authenticated user - rpc GetSentFriendshipRequests(GetFriendshipRequestsPayload) returns (PaginatedFriendshipRequestsResponse) {} - - // Create or update friendship status: REQUEST, ACCEPT, REJECT, CANCEL, DELETE - rpc UpsertFriendship(UpsertFriendshipPayload) - returns (UpsertFriendshipResponse) {} - - // Subscribe to updates of friendship status: REQUEST, ACCEPT, REJECT, CANCEL, DELETE - rpc SubscribeToFriendshipUpdates(google.protobuf.Empty) - returns (stream FriendshipUpdate) {} - - rpc GetFriendshipStatus(GetFriendshipStatusPayload) returns (GetFriendshipStatusResponse) {} -} diff --git a/proto/decentraland/social_service_v2/social_service.proto b/proto/decentraland/social_service_v2/social_service.proto deleted file mode 100644 index d5802e49..00000000 --- a/proto/decentraland/social_service_v2/social_service.proto +++ /dev/null @@ -1,112 +0,0 @@ -syntax = "proto3"; -package decentraland.social_service_v2; - -import "google/protobuf/empty.proto"; - -// Errors - -message InvalidFriendshipAction {} - -message InternalServerError {} - -// Types - -message User { string address = 1; } - -message RequestResponse { - User user = 1; - int64 created_at = 2; - optional string message = 3; -} - -message RequestPayload { - User user = 1; - optional string message = 3; -} - -message Requests { - repeated RequestResponse requests = 1; -} - -message AcceptResponse { User user = 1; } - -message AcceptPayload { User user = 1; } - -message RejectResponse { User user = 1; } - -message RejectPayload { User user = 1; } - -message DeleteResponse { User user = 1; } - -message DeletePayload { User user = 1; } - -message CancelResponse { User user = 1; } - -message CancelPayload { User user = 1; } - -message UpsertFriendshipPayload { - oneof action { - RequestPayload request = 1; - AcceptPayload accept = 2; - RejectPayload reject = 4; - DeletePayload delete = 5; - CancelPayload cancel = 6; - } -} - -message MutualFriendsPayload { - User user = 1; -} - -message UsersResponse { - repeated User users = 1; -} - -message FriendshipRequestsResponse { - oneof response { - Requests requests = 1; - InternalServerError internal_server_error = 2; - } -} - -message UpsertFriendshipResponse { - message Accepted {} - oneof response { - Accepted accepted = 1; - InvalidFriendshipAction invalid_friendship_action = 2; - InternalServerError internal_server_error = 3; - } -} - -message FriendshipUpdate { - oneof update { - RequestResponse request = 1; - AcceptResponse accept = 2; - RejectResponse reject = 4; - DeleteResponse delete = 5; - CancelResponse cancel = 6; - } -} - -// @deprecated -service SocialService { - // Get the list of friends for the authenticated user - rpc GetFriends(google.protobuf.Empty) returns (stream UsersResponse) {} - - // Get the list of mutual friends between the authenticated user and the one in the parameter - rpc GetMutualFriends(MutualFriendsPayload) returns (stream UsersResponse) {} - - // Get the pending friendship requests for the authenticated user - rpc GetPendingFriendshipRequests(google.protobuf.Empty) returns (FriendshipRequestsResponse) {} - - // Get the sent friendship requests for the authenticated user - rpc GetSentFriendshipRequests(google.protobuf.Empty) returns (FriendshipRequestsResponse) {} - - // Create or update friendship status: REQUEST, ACCEPT, REJECT, CANCEL, DELETE - rpc UpsertFriendship(UpsertFriendshipPayload) - returns (UpsertFriendshipResponse) {} - - // Subscribe to updates of friendship status: REQUEST, ACCEPT, REJECT, CANCEL, DELETE - rpc SubscribeToFriendshipUpdates(google.protobuf.Empty) - returns (stream FriendshipUpdate) {} -} diff --git a/public/social.proto b/public/social.proto index 9eadaf10..278b4bb6 100644 --- a/public/social.proto +++ b/public/social.proto @@ -1,4 +1,6 @@ syntax = "proto3"; + package decentraland.social; -import public "decentraland/social/friendships/friendships.proto"; +import public "decentraland/social_service/v1/social_service_v1.proto"; +import public "decentraland/social_service/v2/social_service_v2.proto"; diff --git a/public/social_service.proto b/public/social_service.proto deleted file mode 100644 index a23161c3..00000000 --- a/public/social_service.proto +++ /dev/null @@ -1,4 +0,0 @@ -syntax = "proto3"; -package decentraland.social; - -import public "decentraland/social_service/v3/social_service_v3.proto"; diff --git a/public/social_service_v2.proto b/public/social_service_v2.proto deleted file mode 100644 index 1e1c917e..00000000 --- a/public/social_service_v2.proto +++ /dev/null @@ -1,4 +0,0 @@ -syntax = "proto3"; -package decentraland.social; - -import public "decentraland/social_service_v2/social_service.proto"; From b3fea336ca15c05953ef95089dfaa976772f2131 Mon Sep 17 00:00:00 2001 From: Gon Pombo Date: Tue, 21 Jan 2025 13:30:27 -0300 Subject: [PATCH 4/4] send binary message to specific address (#222) * send binary message to specific address * update naming & update branch * update address to be an array * use only peerData --- .../kernel/apis/communications_controller.proto | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/proto/decentraland/kernel/apis/communications_controller.proto b/proto/decentraland/kernel/apis/communications_controller.proto index ee2f3722..b1664099 100644 --- a/proto/decentraland/kernel/apis/communications_controller.proto +++ b/proto/decentraland/kernel/apis/communications_controller.proto @@ -8,7 +8,13 @@ message RealSendRequest { message RealSendResponse {} message SendBinaryRequest { + repeated bytes data = 1; // @deprecated old broadcasted messages. Use peerData with an empty array for broadcasting. + repeated PeerMessageData peer_data = 2; // peer-to-peer messages +} + +message PeerMessageData { repeated bytes data = 1; + repeated string address = 2; // if address is empty, its a broadcast message } message SendBinaryResponse {