> For the complete documentation index, see [llms.txt](https://docs.decentraland.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.decentraland.org/contributor/social-service/js-client.md).

# JavaScript Client

This documentation is extracted from [social-rpc-client-js](https://github.com/decentraland/social-rpc-client-js#using-the-client)

#### Basic setup and usage

To use the client, install the package in your NPM project:

```bash
npm install -S @dcl/social-rpc-client
```

Import the client creator function from the installed package:

```typescript
import { createSocialClient } from "@dcl/social-client";
```

Create a new client instance by providing the client with:

1. A URL to the Social Service's REST API
2. A URL to the Social Service's Websocket endpoint
3. The user's address (the same as the one used to sign the identity)
4. An identity, signed with the user's wallet.

```typescript
import { createSocialClient } from "@dcl/social-client";
import { Wallet } from 'ethers'

// Generate a random wallet for testing purposes or use the user's one in production environments.
const wallet = Wallet.createRandom()
const identity = await createIdentity(wallet, expiration)

const socialClient = await createSocialClient(
  "https://social.decentraland.org",
  "wss://social-service.decentraland.org",
  wallet.address,
  identity
);
```

The `createSocialClient` will connect perform the required operations to connect to the Social Service and will return the connected client.

Use the client to interact with the Social Service:

```typescript
import { createSocialClient } from "@dcl/social-client";

const socialClient = await createSocialClient(
  "https://social.decentraland.org",
  "wss://social-service.decentraland.org",
  wallet.address,
  identity
);

const friends = socialClient.getFriends()
for await (const friend of friends) {
  console.log(friend)
}
```

The client exposes the methods available through the [social protobuff](https://github.com/decentraland/protocol/blob/main/public/social.proto) and a disconnect method which disconnects the client from the Social Service.

#### Generating an identity

To authenticate users with the Social Service, you'll need to generate an identity for them. To do so, the `@dcl/crypto` library provides the `Authenticator.initializeAuthChain` method. Use it to generate an identity for your users:

```typescript
  import { Wallet } from 'ethers'
  import { Authenticator } from '@dcl/crypto'
  // Generate a random wallet for testing purposes or use the user's one in production environments.
  const userWallet = Wallet.createRandom()

  // Generate an identity for the user.
  const address = await userWallet.getAddress()
  const ephemeralWallet = Wallet.createRandom()
  const payload = {
    address: ephemeralWallet.address,
    privateKey: ephemeralWallet.privateKey,
    publicKey: ephemeralWallet.publicKey
  }
  const identity = await Authenticator.initializeAuthChain(address, payload, expiration, (message: string) => signer.signMessage(message))
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

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

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.decentraland.org/contributor/social-service/js-client.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

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.
