Skip to content

cabal-club/cabal-client

Repository files navigation

cabal-client

cabal-client is a new type of client library for cabal chat clients.

New chat clients can be implemented using only this library, without having to mess around with cabal-core anymore.

Some of its features:

  • consolidates logic common to all chat clients
  • leaving and joining of channels
  • virtual messages (such as status messages) and virtual channels (currently only the !status channel)
  • handling multiple cabal instances
  • receiving unread notifications and mentions for channels
  • resolving of DNS shortnames (cabal.chat) to cabal keys

For a couple of brief examples, see the examples/ directory.

Usage

See cabal-cli for an example client implementation.

Read the API documentation

var Client = require('cabal-client')

const client = new Client({
  config: {
    dbdir: '/tmp/cabals'
  }
})

client.createCabal()
  .then((cabal) => {
    // resolves when the cabal is ready, returns a CabalDetails instance
  })

Concepts

cabal-client has three core abstractions: Client, CabalDetails and ChannelDetails.

Client is the entrypoint. It has a list of CabalDetails (one details for each joined cabal) as well as an API for interacting with a cabal (getting a count of the new messages for a channel, the joined channels for the current peer etc).

CabalDetails is the instance that clients mostly operate on, as it encapsulates all information for a particular cabal. (joined channels, users in that channel, the topic). It also emits events.

When a change has happened, a CabalDetails instance will call this._emitUpdate(). When a client receives this event, they should update their state & rerender. (Check out how the cli does it.)

ChannelDetails encapsulates everything channels (mentions in that channel, status messages for the channel (like having called a command eg /names, when it was last read, if it's currently being viewed, if it's joined and so on). It also has a barebones implementation for virtual channels, which currently is only the !status channel.

Install

With npm installed, run

$ npm install cabal-client

Developing

Changelog

See the instructions for generating the changelog in the cabal-core readme.

License

AGPL-3.0-or-later