Skip to content

CodyTseng/nostr-relay-nestjs

Repository files navigation

Nostr Relay NestJS

Coverage Status FOSSA Status

Powered by nostr-relay & NestJS.

A high-performance nostr relay, using PostgreSQL.

If you'd like to help me test the reliability of this relay implementation, you can add wss://nostr-relay.app to your relay list (it's free) 💜⚡️

Note: Please use the released version of this code. The latest version may contain changes to migration scripts and other elements that are not finalized.

Deploy on Railway

Features

🟢 Full implemented 🟡 Partially implemented 🔴 Not implemented

Feature Status Note
NIP-01: Basic protocol flow description 🟢
NIP-02: Contact List and Petnames 🟢
NIP-04: Encrypted Direct Message 🟢
NIP-09: Event Deletion 🔴 No real deletion in a distributed system
NIP-11: Relay Information Document 🟢
NIP-13: Proof of Work 🟢
NIP-22: Event created_at Limits 🟢
NIP-26: Delegated Event Signing 🟢
NIP-28: Public Chat 🟢
NIP-40: Expiration Timestamp 🟢
NIP-42: Authentication of clients to relays 🟢
NIP-45: Counting results 🔴
NIP-50: Keywords filter 🟢

Extra Features

TOP verb

TOP verb accepts a subscription id and filters as specified in NIP 01 for the verb REQ.

["TOP",<subscription_id>,<filters JSON>...]

And return the top N event IDs with the highest score (Scoring is determined by relay).

["TOP",<subscription_id>,<event id array>]

Example:

["TOP","test",{"search":"nostr bitcoin","kinds":[30023],"limit":10}]

["TOP","test",["2359f4bdfe0bd2353aa7702dc1af23279197694823b8b4916b904a9940334192","622a875c9f9a4696eb4050fa5b0bba3a9b0531ec4a27398245af7369e6d40da8","d8989c65d26511b2e3ea42b0ebfcaf0ea885cb958419df4ddb334cb72556f950","ffcb0c9e0ace0b5d3928f30395bc9832763f8b583f2b1beb696f7c199f9f94d2","287147867bd00299553fa91e110d40206eea19a9142a4283832ee67e1407e6f2","ffaea8bc3b08db32af97f1ff595e68eee8a2f7b0a4a66dc2eff330f450855f6c","cddbc6cd4a0589d4a593e99a3a94426c85c6867b47d7eb751ce419c27f079b76","f2291ac6d206e898965b9e4ba6bbe5bb10118e6a74bd9f9f13597813979a254b","a101a2a44938dbb0a611bc00bd7ed4cb44d682fea4c14618bd1148567cd6fcc3","21990a723b491b6c594438a2ecf5d5e4898212635f59e82f1c736d994a86e907"]]

Quick Start

Dockerfile

Build image

./scripts/build.sh

Create .env file based on example.env file

DATABASE_URL=postgresql://username:password@host:port/database

Run container

./scripts/run.sh

Local Development

First of all, you need to have a PostgreSQL database running.

Clone the repository and install dependencies

git clone https://github.com/CodyTseng/nostr-relay-nestjs.git
cd nostr-relay-nestjs
npm install

Create .env file based on example.env file

DATABASE_URL=postgresql://username:password@host:port/database

Execute migration scripts

npm run migration:run

Start the server

npm run start

Metrics

You can view some simple relay metrics on /metrics endpoint.

Metrics snapshot

TODO

  • Unit test
  • Metrics, Monitoring and Alerting
  • Support multi nodes
  • Support for Bitcoin Lightning Network payments

Architecture

Architecture Diagram

Donate

If you like this project, you can buy me a coffee :) ⚡️ codytseng@getalby.com ⚡️

License

This project is MIT licensed.

FOSSA Status

About

A high-performance nostr relay, using PostgreSQL. (Thanks to https://opensats.org/ for their generous donation!)

Topics

Resources

License

Stars

Watchers

Forks

Sponsor this project

 

Packages

No packages published