# cabal-client

> helper module for cabal clients

Latest version **8.0.2** (published 2024-01-25) · AGPL-3.0-or-later license · 0 weekly downloads

## Install

```sh
npm install cabal-client
pnpm add cabal-client
yarn add cabal-client
bun add cabal-client
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 8.0.2 |
| Published | 2024-01-25 |
| First published | 2019-09-01 |
| Weekly downloads | 0 |
| License | AGPL-3.0-or-later |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 17 |
| Unpacked size | 189.8 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 97 |
| Author | Cabal Club |
| Maintainers | ralphtheninja, cblgh, nickwarner, noffle |

## Links

- npm: https://www.npmjs.com/package/cabal-client
- Repository: https://github.com/cabal-club/cabal-client
- Issues: https://github.com/cabal-club/cabal-client/issues
- npm.io page: https://npm.io/package/cabal-client

## Dependencies (17)

- [to2](https://npm.io/package/to2.md) ^1.0.0
- [pump](https://npm.io/package/pump.md) ^3.0.0
- [debug](https://npm.io/package/debug.md) ^4.1.1
- [level](https://npm.io/package/level.md) ^6.0.1
- [memdb](https://npm.io/package/memdb.md) ^1.3.1
- [mkdirp](https://npm.io/package/mkdirp.md) ^1.0.4
- [qrcode](https://npm.io/package/qrcode.md) ^1.4.4
- [dat-dns](https://npm.io/package/dat-dns.md) ^4.1.2
- [js-yaml](https://npm.io/package/js-yaml.md) ^4.1.0
- [strftime](https://npm.io/package/strftime.md) ^0.10.0
- [paperslip](https://npm.io/package/paperslip.md) ^3.1.0
- [cabal-core](https://npm.io/package/cabal-core.md) ^16.0.2
- [collect-stream](https://npm.io/package/collect-stream.md) ^1.2.1
- [hypercore-crypto](https://npm.io/package/hypercore-crypto.md) ^2.1.0
- [random-access-web](https://npm.io/package/random-access-web.md) ^2.0.3
- [monotonic-timestamp](https://npm.io/package/monotonic-timestamp.md) 0.0.9
- [random-access-memory](https://npm.io/package/random-access-memory.md) ^3.1.1

## Recent versions

- 8.0.2 (latest) — 2024-01-25
- 3.0.0-prerelease (prerelease) — 2020-03-24
- 8.0.1 — 2023-10-17
- 8.0.0 — 2023-10-17
- 7.3.3 — 2023-05-31
- 7.3.2 — 2022-10-31
- 7.3.1 — 2022-05-26
- 7.3.0 — 2022-05-24
- 7.2.2 — 2021-12-16
- 7.2.1 — 2021-12-11
- 7.2.0 — 2021-11-23
- 7.1.0 — 2021-10-23
- 7.0.0 — 2021-09-26
- 6.3.2 — 2021-05-01
- 6.3.1 — 2021-03-06
- … 34 more at https://npm.io/package/cabal-client/versions

## 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 keys

For 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

---
_Source: https://npm.io/package/cabal-client · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
