# Visão Geral

Detalhes sobre o uso da Social Service API para recuperar amizades, solicitações e amigos em comum na plataforma Decentraland. A API permite que desenvolvedores interajam com o Social Service para obter informações relacionadas a amizades.

#### REST API

Para recuperar amizades, o Social Service expõe um [REST API](https://social-service-api-specs.pages.dev/):

* `GET /friendships/me` - Recuperar as amizades do usuário atual. Requer o token de acesso no cabeçalho Authorization.
* `GET /friendships/{other-address}/mutuals` - Recuperar amigos em comum com outro usuário. Requer o token de acesso no cabeçalho Authorization.

#### WebSocket RPC Server

A Social Service WebSocket API fornece dois tipos de mensagens para recuperar amizades e amigos em comum. Primeiro você precisa estabelecer uma conexão WebSocket e então usar esses métodos para transmitir informações relacionadas ao usuário.

* `GetFriends` - Recuperar os amigos de um usuário. Retorna um stream de respostas de usuários.
* `GetMutualFriends` - Recuperar amigos em comum com outro usuário. Retorna um stream de respostas de usuários.

Consulte o [arquivo friendships.proto](https://github.com/decentraland/protocol/blob/main/proto/decentraland/social/friendships/friendships.proto#L7) para mais detalhes sobre esses tipos de mensagem.

### Exemplos de Código em JavaScript

Para interagir com a Social Service WebSocket API usando JavaScript, você pode usar o cliente RPC fornecido conforme explicado anteriormente. Mas se precisar implementá-lo você mesmo, abaixo há exemplos de código demonstrando como recuperar amigos e amigos em comum:

#### Obtendo Todos os Amigos

```javascript
import { createRpcClient, createWebSocketsTransport } from '@dcl/rpc/dist/client';
import { FriendshipsServiceDefinition } from './protobuff-types/decentraland/social/friendships/friendships.gen';

const socialClientRpcUrl = 'wss://social.decentraland.org'; // Substitua pela URL real
const webSocketsTransport = createWebSocketsTransport(socialClientRpcUrl);
const service = loadService(FriendshipsServiceDefinition, webSocketsTransport);

const response = service.getFriends(Payload.create({ synapseToken }));
for await (const friends of response) {
  processErrors(friends);
  const userList = friends.users?.users ?? [];
  // Processar a lista de amigos
}
```

#### Obtendo Amigos em Comum

```javascript
const response = service.getMutualFriends(
  MutualFriendsPayload.create({
    user: { address }, 
    authToken: { synapseToken }
  })
);
for await (const mutualFriend of response) {
  processErrors(mutualFriend);
  const mutualFriendList = mutualFriend.users?.users ?? [];
  // Processar a lista de amigos em comum
}
```

Para mais exemplos de código e detalhes, visite o [repositório social-rpc-client-js no GitHub](https://github.com/decentraland/social-rpc-client-js)
