README.md

# BlueskyEx

This is an Elixir client for the [Bluesky](https://blueskyweb.xyz/) /
[AT protocol](https://atproto.com/).

Right now it's in a pretty barebones proof-of-concept state. Contributions
to make it more full-featured are more than welcome :)

## Installation

```sh
make build
```

## Usage

Here's an example CLI session:

```sh
make console
```

```elixir
username = "username"
password = "password"
pds = "https://bsky.social"

creds = %BlueskyEx.Client.Credentials{
  username: username,
  password: password
}
session = BlueskyEx.Client.Session.create(creds, pds)

# Fetch 15 skeets from the timeline
popular = BlueskyEx.Client.RecordManager.get_timeline(session, limit: 15)

# Make a skeet with the text content "skeet"
post = BlueskyEx.Client.RecordManager.create_post(session, text: "skeet")
```

### API reference

See [Hexdocs](https://hexdocs.pm/bluesky_ex).

## Contributing

### Formatting

This project uses [credo](http://credo-ci.org/) and
[formatter](https://hexdocs.pm/mix/master/Mix.Tasks.Format.html) for style
consistency. Please run

```sh
mix format
```

and

```sh
mix credo -a --strict
```

before committing changes.

### Type checking

Typespecs are validated through
[dialyzer](https://github.com/jeremyjh/dialyxir).

```sh
mix dialyzer
```

### Helpers

As a shortcut, you can run

```sh
make lint
```

to run all three of the above commands before authoring a commit.

### Guidelines

#### Testing

All public functions "should" be tested exhaustively, but coverage is spotty
right now -- contributions are welcome.

You can run the test suite with

```sh
make test-unit
```

#### Documentation

All public modules and their functions should be documented with the
appropriate typespecs.

This library uses
[ExDoc](https://hexdocs.pm/elixir/1.12/writing-documentation.html)
conventions for documentation. You can run

```sh
make docs
```

to build the docs and open them in your local environment.

## License

MIT