Javascript Client
This documentation is extracted from social-rpc-client-js
Basic setup and usage #
To use the client, install the package in your NPM project:
npm install -S @dcl/social-rpc-client
Import the client creator function from the installed package:
import { createSocialClient } from "@dcl/social-client";
Create a new client instance by providing the client with:
- A URL to the Social Service’s REST API
- A URL to the Social Service’s Websocket endpoint
- The user’s address (the same as the one used to sign the identity)
- An identity, signed with the user’s wallet.
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:
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 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:
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))