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
!statuschannel) - 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.
See cabal-cli for an example client implementation.
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
})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.
With npm installed, run
$ npm install cabal-client
See the instructions for generating the changelog in the cabal-core readme.
AGPL-3.0-or-later