Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/cabal-club/cabal-client
interface for writing peer-to-peer chat clients
https://github.com/cabal-club/cabal-client
cabal chat decentralized p2p
Last synced: 7 days ago
JSON representation
interface for writing peer-to-peer chat clients
- Host: GitHub
- URL: https://github.com/cabal-club/cabal-client
- Owner: cabal-club
- License: gpl-3.0
- Created: 2018-05-27T19:55:12.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2024-05-15T15:58:28.000Z (8 months ago)
- Last Synced: 2024-10-29T18:47:56.255Z (3 months ago)
- Topics: cabal, chat, decentralized, p2p
- Language: JavaScript
- Homepage:
- Size: 547 KB
- Stars: 97
- Watchers: 9
- Forks: 14
- Open Issues: 28
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# 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`](https://github.com/cabal-club/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 keysFor a couple of brief examples, see the [`examples/`](examples/) directory.
## Usage
See [`cabal-cli`](https://github.com/cabal-club/cabal-cli/) for an example client implementation.
[Read the API documentation](./api.md)
```js
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`](https://github.com/cabal-club/cabal-client/blob/master/src/client.js),
[`CabalDetails`](https://github.com/cabal-club/cabal-client/blob/master/src/cabal-details.js) and
[`ChannelDetails`](https://github.com/cabal-club/cabal-client/blob/master/src/channel-details.js).[`Client`](https://github.com/cabal-club/cabal-client/blob/master/src/client.js) 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`](https://github.com/cabal-club/cabal-client/blob/master/src/cabal-details.js) 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](https://github.com/cabal-club/cabal-cli/pull/126).)[`ChannelDetails`](https://github.com/cabal-club/cabal-client/blob/master/src/channel-details.js)
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](https://npmjs.org/) installed, run
```
$ npm install cabal-client
```## Developing
### Changelog
See the instructions for generating the changelog in the [cabal-core readme](https://github.com/cabal-club/cabal-core/#developing).
## License
AGPL-3.0-or-later