Go to file
William Casarin c12da6a229 Command result notices
This introduces a new notice-like event with more structure so that clients
can know if an event is sucessfully written to the database. Clients
can't really do much with the current NOTICE messages, but with these
structured result messages, it can know if an event was sucessfully
saved.

Whenever there is an error and we have an id available (event id, sub
id, etc) we return these structured OK events instead.

Example:

When saving the following event:
    ["EVENT",{"id": "event_id" }]

The server will now return events in the following format:
    ["OK", event_id, "true|false", message]

For example, on a successful save:
    ["OK", "event_id", "true"]

If we already have the event:
    ["OK", "event_id", "true", "duplicate"]

If the event is rejected:
    ["OK", "event_id", "false", "you are blocked"]

If a subscription fails:
    ["OK", "sub_id", "false", "Too many subscriptions"]

NIP coming soon!
2022-11-09 07:44:39 -06:00
.cargo feat: enable use of tokio-console with diagnostics.tracing setting 2022-09-11 12:44:45 -05:00
docs feat: limit event publishing to NIP-05 verified users 2022-02-12 09:29:25 -06:00
src Command result notices 2022-11-09 07:44:39 -06:00
tests test: improve port selection 2022-09-28 07:55:06 -05:00
.build.yml build: add release flags, save artifacts 2022-09-11 10:21:29 -05:00
.gitignore feat: store events in SQLite and allow querying 2021-12-11 15:48:59 -06:00
.pre-commit-config.yaml build: add pre-commit config 2022-09-06 05:44:22 -05:00
Cargo.lock improvement: upgrade multiple dependencies 2022-11-05 10:59:03 -05:00
Cargo.toml build: bump version to 0.7.1 2022-11-05 10:35:38 -05:00
config.toml feat: add network.ping_interval setting 2022-11-05 07:40:28 -05:00
Dockerfile improvement: upgrade docker builder and base images 2022-11-05 13:24:17 -05:00
LICENSE docs: add MIT license 2021-12-11 15:52:25 -06:00
mk-platform-agnostic-dockerfile.sh feat: quick script for making non-x86 Dockerfiles 2022-10-13 18:35:33 -05:00
README.md feat(NIP-26): allow searches for delegated public keys 2022-10-16 15:25:06 -05:00
reverse-proxy.md docs: add NGINX configuration example 2022-08-20 09:35:01 -07:00
rustfmt.toml chore: formatting 2022-08-21 09:51:34 -07:00

nostr-rs-relay

This is a nostr relay, written in Rust. It currently supports the entire relay protocol, and has a SQLite persistence layer.

The project master repository is available on sourcehut, and is mirrored on GitHub.

builds.sr.ht status

Features

NIPs with a relay-specific implementation are listed here.

Quick Start

The provided Dockerfile will compile and build the server application. Use a bind mount to store the SQLite database outside of the container image, and map the container's 8080 port to a host port (7000 in the example below).

$ docker build -t nostr-rs-relay .

$ docker run -it -p 7000:8080 \
  --mount src=$(pwd)/data,target=/usr/src/app/db,type=bind nostr-rs-relay

[2021-12-31T19:58:31Z INFO  nostr_rs_relay] listening on: 0.0.0.0:8080
[2021-12-31T19:58:31Z INFO  nostr_rs_relay::db] opened database "/usr/src/app/db/nostr.db" for writing
[2021-12-31T19:58:31Z INFO  nostr_rs_relay::db] DB version = 2

Use a nostr client such as noscl to publish and query events.

$ noscl publish "hello world"
Sent to 'ws://localhost:8090'.
Seen it on 'ws://localhost:8090'.
$ noscl home
Text Note [81cf...2652] from 296a...9b92 5 seconds ago
  hello world

A pre-built container is also available on DockerHub: https://hub.docker.com/r/scsibug/nostr-rs-relay

Configuration

The sample config.toml file demonstrates the configuration available to the relay. This file is optional, but may be mounted into a docker container like so:

$ docker run -it -p 7000:8080 \
  --mount src=$(pwd)/config.toml,target=/usr/src/app/config.toml,type=bind \
  --mount src=$(pwd)/data,target=/usr/src/app/db,type=bind \
  nostr-rs-relay

Options include rate-limiting, event size limits, and network address settings.

Reverse Proxy Configuration

For examples of putting the relay behind a reverse proxy (for TLS termination, load balancing, and other features), see Reverse Proxy.

Dev Channel

For development discussions, please feel free to use the sourcehut mailing list. Or, drop by the Nostr Telegram Channel.

To chat about nostr-rs-relay on nostr itself; visit our channel on anigma or another client that supports NIP-28 chats:

  • 2ad246a094fee48c6e455dd13d759d5f41b5a233120f5719d81ebc1935075194

License

This project is MIT licensed.