js-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))