A reverse engineering of .proto files for calling the gRPC services of a popular authentic social network.
Roadmap
-
chat.core.v1.ChatCoreService/SendMessage -
chat.core.v1.ChatCoreService/GetMessages -
chat.core.v1.ChatCoreService/UpdateMessage -
chat.core.v1.ChatCoreService/CreateConversation -
chat.core.v1.ChatCoreService/AcceptConversation -
chat.core.v1.ChatCoreService/UpdateConversation -
chat.core.v1.ChatCoreService/ClearConversation -
chat.core.v1.ChatCoreService/GetConversationFeed -
chat.core.v1.ChatCoreService/GetConversationsById -
chat.core.v1.ChatCoreService/TriggerMoment -
chat.core.v1.ChatCoreService/GetUserPrefs -
chat.core.v1.ChatCoreService/UpdateUserPrefs -
chat.core.v1.ChatCoreService/RankConversation -
chat.core.v1.ChatCoreService/CreateInvite -
chat.core.v1.ChatCoreService/CreateInvites -
chat.core.v1.ChatCoreService/HandleInvite -
chat.core.v1.ChatCoreService/GetPendingInvites -
chat.core.v1.ChatCoreService/GetSentInvites -
chat.core.v1.ChatCoreService/ResetInviteLink -
chat.core.v1.ChatCoreService/GetInviteLink -
chat.core.v1.ChatCoreService/ViewInviteLink -
chat.core.v1.ChatCoreService/JoinByInviteLink -
media.upload.v1.MediaUploadService/CreateUploadUrls -
realtime.core.v1.RealTimeStreamService/Stream -
realtime.core.v1.RealTimeRouterService/Send -
public.activity.v2.ActivityService/GetActivityFeed -
public.activity.v2.ActivityService/MarkActivitiesAsSeen -
public.discovery.v2.FeedDiscoveryV2Service/GetFeedV2 -
public.entity.v2.UserService/GetUsers(unavailable) -
public.entity.v2.UserService/GetUserProfile -
public.entity.v2.UserService/SetAstroSign(unavailable) -
public.entity.v2.PostService/GetPosts -
public.entity.v2.PostService/DeletePostRealmoji(unavailable) -
public.entity.v2.PostService/CreatePostRealmoji(unavailable) -
public.entity.v2.PostService/CreatePostComment(unavailable) -
public.entity.v2.PostService/SetPostsAsPublic -
public.entity.v2.PostService/CreatePostLike -
public.entity.v2.PostService/DeletePostLike -
public.entity.v2.PostService/CreateCommentReaction(unavailable) -
public.entity.v2.PostService/DeleteCommentReaction(unavailable) -
public.entity.v2.PostService/GetUserCommentReactions(unavailable) -
public.entity.v2.PostService/GetNbCommentReactions(unavailable) -
public.home.v2.FeedService/GetHomeFeed -
public.home.v2.FeedService/MarkPostsAsSeen -
public.home.v2.FeedService/GetWhatYouMissed -
public.home.v2.StateService/GetMyState -
public.location.v2.PlacesService/SearchPlaces -
public.media.v2.MediaService/CreateUploadUrls(unavailable) -
public.memories.v2.MemoriesService/GetMemoriesFeed -
public.memories.v2.MemoriesService/GetTopMemories -
public.pprofile.v2.PublicProfileService/GetFriendsWhoFollowTarget -
public.relationship.v2.RelationshipService/GetUserRelationships -
public.relationship.v2.RelationshipService/CreateRelationship -
public.relationship.v2.RelationshipService/DeleteRelationship -
public.relationship.v2.RelationshipService/ListRelationships -
public.story.v2.StoryService/GetMyStories -
public.story.v2.StoryService/GetMyStoryActivity -
public.topic.v2.TopicService/SearchTopics -
public.topic.v2.TopicService/GetExploreFeed -
public.topic.v2.UserInterestService/GetUserInterest -
public.topic.v2.UserInterestService/PutUserInterest -
public.topic.v2.UserInterestService/GetContentTaxonomy -
contacts.core.v1.ContactsService/Delete -
contacts.core.v1.ContactsService/GetMatchedFriends -
contacts.core.v1.ContactsService/GetSuggestions -
contacts.core.v1.ContactsService/HideSuggestions -
contacts.core.v1.ContactsService/Upload -
entity.user.v1.UserService/GetOAUsers -
entity.user.v1.UserService/GetUser -
entity.user.v1.UserService/GenUsernames -
entity.user.v1.UserService/GetUserBasicInfo -
entity.user.v1.UserService/GetUserBasicInfoBatch -
entity.user.v1.UserService/UserExists -
entity.user.v1.UserService/CreateUser -
entity.user.v1.UserService/UpdateUser -
entity.user.v1.UserService/UpdateUserActivity -
entity.user.v1.UserService/GetUserActivity -
entity.user.v1.UserService/DeleteUser -
entity.user.v1.UserService/SearchUsers -
entity.user.v1.UserService/FindUsersByUsername -
entity.user.v1.UserService/InsertUser -
entity.user.v1.UserService/InsertUserRealmoji -
entity.user.v1.UserService/AddUserRealmoji -
entity.user.v1.UserService/DisableUserRealmoji -
entity.user.v1.UserService/DeleteUserRealmoji -
entity.user.v1.UserService/UserRealmojiExists -
entity.user.v1.UserService/GetUserRealmojis -
entity.user.v1.UserService/GetStreak -
entity.user.v1.UserService/GetStreaks -
entity.user.v1.UserService/UpdateStreak -
feed.discovery.v1.FeedDiscoveryService/GetFeed -
feed.discovery.v1.FeedDiscoveryService/FeedInteraction -
feed.discovery.v1.FeedDiscoveryService/PostSeen -
feed.discovery.v1.FeedDiscoveryService/ResetSeenPosts -
feed.discovery.v1.FeedDiscoveryService/GetPublicPosts -
entity.event.v1.EventService/CreateEvent -
entity.event.v1.EventService/GetEvent -
entity.event.v1.EventService/UpdateEvent -
entity.event.v1.EventService/DeleteEvent -
entity.event.v1.EventService/GetAllEvents -
entity.event.v1.EventService/CreateVenue -
entity.event.v1.EventService/GetVenue -
entity.event.v1.EventService/UpdateVenue -
entity.event.v1.EventService/DeleteVenue -
entity.event.v1.EventService/GetAllVenues -
entity.post.v1.PostService/GetPost -
entity.post.v1.PostService/GetPosts -
entity.post.v1.PostService/GetPostInteractions -
entity.post.v1.PostService/GetPostInteractionCounts -
entity.post.v1.PostService/GetUserInteractions -
entity.post.v1.PostService/GetCommentsByStatus -
entity.post.v1.UnifiedPostService/GetUnifiedPost -
entity.post.v1.UnifiedPostService/GetUnifiedPosts -
entity.post.v1.UnifiedPostService/CreateUnifiedPost -
entity.post.v1.UnifiedPostService/DeleteUnifiedPost -
entity.post.v1.UnifiedPostService/RestoreUnifiedPost -
entity.post.v1.UnifiedPostService/UpdateUnifiedPost -
entity.post.v1.UnifiedPostService/GetUnifiedPostsOfUser -
entity.post.v1.UnifiedPostService/DeleteUserData -
entity.post.v1.UnifiedPostService/CreateUnifiedPostRealmoji -
entity.post.v1.UnifiedPostService/GetUnifiedPostRealmojis -
entity.post.v1.UnifiedPostService/DeleteUnifiedPostRealmoji -
entity.post.v1.UnifiedPostService/CreateUnifiedPostComment -
entity.post.v1.UnifiedPostService/DeleteUnifiedPostComment -
entity.post.v1.UnifiedPostService/GetUnifiedPostComments -
entity.post.v1.UnifiedPostService/CreateUnifiedPostTag -
entity.post.v1.UnifiedPostService/DeleteUnifiedPostTag -
entity.post.v1.UnifiedPostService/GetUnifiedPostTags -
entity.post.v1.UnifiedPostService/CreateUnifiedPostScreenshot -
entity.post.v1.UnifiedPostService/GetUnifiedPostScreenshots -
event.frontend.v1.EventViewService/GetMainEventView -
event.frontend.v1.EventMembershipService/JoinEvent -
event.frontend.v1.EventMembershipService/LeaveEvent -
event.frontend.v1.EventMembershipService/UpdateEventLocation -
event.frontend.v1.EventFeedService/GetOfficialFeed -
event.frontend.v1.EventFeedService/GetOwnAndFriendsFeed -
event.frontend.v1.EventFeedService/GetOnsiteFeed -
event.frontend.v1.EventFeedService/GetOffsiteFeed -
event.frontend.v1.EventFeedService/GetEveryoneFeed -
event.frontend.v1.EventSearchService/GetAllEvents -
event.frontend.v1.EventPostService/CreatePost -
event.frontend.v1.EventPostService/DeletePost -
event.frontend.v1.EventAdminService/CreateEvent -
event.frontend.v1.EventAdminService/DeleteEvent -
event.frontend.v1.EventAdminService/TriggerNotification -
officialaccounts.discovery.v1.DiscoveryService/GetRecommendations -
officialaccounts.discovery.v1.DiscoveryService/GetAll -
officialaccounts.feed.v1.FeedService/GetMentionsFeed -
officialaccounts.feed.v1.FeedService/GetRankedMentionsFeed -
officialaccounts.feed.v1.FeedService/GetActivityFeed -
officialaccounts.feed.v1.FeedService/GetOAProfileFeed -
officialaccounts.feed.v1.FeedService/GetOAFanFeed -
officialaccounts.feed.v1.FeedService/GetOAActivityFeed -
officialaccounts.feed.v1.FeedService/GetPostMetrics -
officialaccounts.feed.v1.FeedService/GetOAPost -
officialaccounts.feed.v1.FeedService/GetOARecommendationsFeed -
officialaccounts.feed.v1.FeedService/GetFanFeed -
officialaccounts.feed.v1.FeedService/GetEngagementMetrics -
officialaccounts.feed.v1.ViewService/GetOAProfileView -
officialaccounts.relationships.v1.RelationshipsService/Follow -
officialaccounts.relationships.v1.RelationshipsService/Unfollow -
officialaccounts.relationships.v1.RelationshipsService/EnablePostNotifications -
officialaccounts.relationships.v1.RelationshipsService/DisablePostNotifications -
officialaccounts.relationships.v1.RelationshipsService/GetPostNotificationStatus -
officialaccounts.relationships.v1.RelationshipsService/GetAllFollowing -
officialaccounts.relationships.v1.RelationshipsService/GetFollowerStatus -
officialaccounts.relationships.v1.RelationshipsService/GetFollowerCount -
officialaccounts.relationships.v1.RelationshipsService/GetFriendsFollowingOA -
officialaccounts.relationships.v1.RelationshipsService/GetCommentsByStatus -
officialaccounts.settings.v1.OfficialAccountsSettingsService/GetOfficialAccountSettings -
officialaccounts.settings.v1.OfficialAccountsSettingsService/UpdateOfficialAccountSettings -
relationship.contactinvites.v1.ContactinvitesService/Create -
relationship.contactinvites.v1.ContactinvitesService/CreateMany -
relationship.contactinvites.v1.ContactinvitesService/List -
relationship.contactinvites.v1.ContactinvitesService/ListDormantFriends -
relationship.contactinvites.v1.ContactinvitesAdminService/Create -
relationship.contactinvites.v1.ContactinvitesAdminService/GetByExternalId -
relationship.contactinvites.v1.ContactinvitesAdminService/List -
relationship.contactinvites.v1.ContactinvitesAdminService/DeleteByUserId -
relationship.contactinvites.v1.ContactinvitesAdminService/Update -
relationship.friendrequest.v1.FriendRequestService/CreateFriendRequest -
relationship.friendrequest.v1.FriendRequestService/GetEdges -
relationship.friends.v1.FriendsService/AreFriends -
relationship.friends.v1.FriendsService/IsFriendWith -
relationship.frontend.v1.RelationshipService/GetUserRelationships -
relationship.graph.v1.RelationshipService/GetEdge -
relationship.graph.v1.RelationshipService/GetEdges -
relationship.graph.v1.RelationshipService/ListEdges -
relationship.graph.v1.RelationshipService/AddEdgeAndInverse -
relationship.graph.v1.RelationshipService/RemoveInverseEdge -
relationship.graph.v1.RelationshipService/RemoveEdgeAndInverse -
relationship.graph.v1.RelationshipService/VertexCount -
relationship.graph.v1.RelationshipService/AsyncRemoveVertex -
relationship.graph.v1.RelationshipService/SetEdgeState -
relationship.graph.v1.RelationshipService/AdminAddEdgeAndInverse -
relationship.graph.v1.RelationshipService/ListEdgesBatch -
relationship.graph.v1.RelationshipService/GetFriendIDs -
relationship.graph.v1.RelationshipService/GetFoFIDs -
relationship.post.v1.PostService/GetLastNMomentsOfUserPosts -
relationship.post.v1.PostService/GetLatestMomentPostsForUsers -
relationship.post.v1.PostService/GetPostStates -
relationship.socialproof.v1.SocialProofService/GetForRealette -
relationship.tag.v1.TagService/GetTaggedPostIds -
search.frontend.v1.SearchService/OASearch -
search.frontend.v1.SearchService/SearchUsers
...and there's still probably missing methods in there !
protoc --proto_path=proto --descriptor_set_out=ogma.desc \
proto/public/**/*.proto \
proto/common/**/*.protoYou'll be able to use the ogma.desc file with any tool that supports it.
You may need the following tools.
protocfor decoding known and compiling protobuf filesdecode_rawfor decoding unknown protobuf files with syntax highlightingbunfor running scripts in this repository
Once done, you can install the dependencies using bun install.
You first need a raw request or response from the service and you should put it in the bins/ directory (mkdir bins if none exists).
If the message you want to decode is already in the proto/ directory, you can decode it using the following command.
bun decode.mts bins/SearchUsersResponse.bin search.frontend.v1.SearchService/SearchUsersResponseHowever, if you're willing to contribute and your message is not in the proto/ directory, you can raw decode it using the following command.
bun decode.mts bins/UnknownMessageResponse.binIt'll print the raw protobuf message in the terminal for easier debugging, we won't elaborate on how to retrieve the proper fields from the raw message, do as you wish.