PrivMX DOCS
JavaScript

Working with Threads

Threads allow users to communicate using topic-specific communication channels. Each Context can contain any number of Threads with a unique identifier (threadId) used to distinguish them. Threads do not need to have unique names or assigned public keys.

Permissions

Threads differentiate two types of users - Managers and Regular Users. The table below shows the differences in their permissions:

ActivityUserManager
Sending messagesyesyes
Editing Threadnoyes
Deleting messagesonly their ownall messages

The values above are the default policy values defined by PrivMX. To read more about Policies and learn how to modify them, go to Policies.

Working with Threads

Before working with Threads, follow the Getting Started Guide. It will show you how to set up your project to work with PrivMX Bridge. Sample code on this page is based on the initial assumptions

When working with Threads, you will use the following:

  • ThreadApi - provides methods used to manage Threads in given Context
JavaScript
const threadApi  = await Endpoint.createThreadApi(connection);

Creating Threads

Creating a basic, unnamed Thread, which can act as an encrypted data container:

JavaScript
const managers = [
    {userId: USER1_ID, pubKey: USER1_PUBLIC_KEY}
];

const users = [
    {userId: USER1_ID, pubKey: USER1_PUBLIC_KEY},
    {userId: USER2_ID, pubKey: USER2_PUBLIC_KEY}
];

// create a new Thread with access for USER_1 as manager and USER_2 as regular user
const threadId = await threadApi.createThread(CONTEXT_ID, users, managers,
    serializeObject("some thread's public meta-data"),
    serializeObject("some thread's private meta-data")
);

Fetching Threads

Fetching the most recent Threads in given Context:

JavaScript
const defaultListQuery = {skip: 0, limit: 100, sortOrder: "desc"};
const threadList = await threadApi.listThreads(CONTEXT_ID, defaultListQuery);

As a result you will receive an object:

JavaScript
// threadList:
{
    readItems: [<threadObject1>, <threadObject2>,..., <threadObjectN>],
    totalAvailable: <number_of_all_threads>
}

A detailed description of the Thread object fields can be found in API Reference.

Modifying Threads

To update a Thread you must always provide a full list of parameters.

The updateThread(...) method needs all the parameters as in the createThread(...) method and a few more. If you want to update one of the parameters - provide it in a new modified form. If - on the other hand - you want to leave the parameter unchanged, provide it as it was before. All current values of the parameters of a given Thread can be obtained using getThread(threadId)

JavaScript
const thread = await threadApi.getThread(threadId);

const newUsers = thread.users.map(user => ({
    //Your application must provide a way,
    //to get user's public key from their userId.
    userId: user,
    pubKey: 'USER_PUBLIC_KEY'
    })
);

const newManagers = newUsers.filter(user =>
    thread.managers.find(manager => manager == user.userId));

const newPrivateMeta = {
    title: 'New thread name'
};

await threadApi.updateThread(
    threadId
    newUsers,
    newManagers,
    thread.publicMeta,
    serializeObject(newPrivateMeta),
    thread.version,
    false,
    false
);

We use cookies on our website. We use them to ensure proper functioning of the site and, if you agree, for purposes such as analytics, marketing, and targeting ads.

On this page

Working with Threads | PrivMX Docs