# Resumen

Detalles sobre el uso del Social Service API para recuperar amistades, solicitudes y amigos en común en la plataforma Decentraland. El API permite a los desarrolladores interactuar con el Social Service para obtener información relacionada con amistades.

#### REST API

Para recuperar amistades, el Social Service expone un [REST API](https://social-service-api-specs.pages.dev/):

* `GET /friendships/me` - Recupera las amistades del usuario actual. Requiere el token de acceso en el encabezado Authorization.
* `GET /friendships/{other-address}/mutuals` - Recupera amigos en común con otro usuario. Requiere el token de acceso en el encabezado Authorization.

#### WebSocket RPC Server

El Social Service WebSocket API proporciona dos tipos de mensajes para recuperar amistades y amigos en común. Primero debes establecer una conexión WebSocket y luego usar esos métodos para transmitir información relacionada con usuarios.

* `GetFriends` - Recupera los amigos de un usuario. Devuelve un flujo (stream) de respuestas de usuario.
* `GetMutualFriends` - Recupera amigos en común con otro usuario. Devuelve un flujo (stream) de respuestas de usuario.

Consulta el [archivo friendships.proto](https://github.com/decentraland/protocol/blob/main/proto/decentraland/social/friendships/friendships.proto#L7) para más detalles sobre estos tipos de mensajes.

### Ejemplos de código en JavaScript

Para interactuar con el Social Service WebSocket API usando JavaScript, puedes usar el cliente RPC proporcionado como se explicó antes. Pero si necesitas implementarlo tú mismo, a continuación hay ejemplos de código que muestran cómo recuperar amigos y amigos en común:

#### Obtener todos los 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'; // Reemplazar con la 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 ?? [];
  // Procesar la lista de amigos
}
```

#### Obtener amigos en común

```javascript
const response = service.getMutualFriends(
  MutualFriendsPayload.create({
    user: { address }, 
    authToken: { synapseToken }
  })
);
for await (const mutualFriend of response) {
  processErrors(mutualFriend);
  const mutualFriendList = mutualFriend.users?.users ?? [];
  // Procesar la lista de amigos en común
}
```

Para más ejemplos de código y detalles, visita el [repositorio social-rpc-client-js en GitHub](https://github.com/decentraland/social-rpc-client-js)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.decentraland.org/contributor/contributor-es/servicio-social/overview.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
