Awesome
Nostring
Nostr relay written in Deno.
You can easily host a relay by Deno Deploy and Bit.io.
Features
- PostgreSQL database
- Spam filter
- Relay Bot
- Zap for admission
Usage
Configure you environments or create a .env
file.
More details are below.
And then:
deno run --allow-net --allow-read --allow-env \
https://deno.land/x/nostring/scripts/start.ts
Or you can clone this repo and start manually:
git clone https://github.com/xbol0/nostring
cd nostring
deno task start
Environment configuration
Name | Required | Description | Default |
---|---|---|---|
DB_URL | yes | PostgreSQL connect URL | |
PORT | no | HTTP server listen port | 9000 |
DB_POOL_SIZE | no | Database client connection pool size | 3 |
RELAY_NAME | no, recommanded | NIP-11 Relay name | nostring |
RELAY_DESC | no | NIP-11 Relay desciption | |
ADMIN_PUBKEY | no, recommanded | NIP-11 Relay admin pubkey, hex encoding. Would be used for bot if enabled. | |
RELAY_COUNTRIES | no | NIP-11 Relay countries | |
ENABLE_BROADCASTCHANNEL | no | Enable BraodcastChannel on Deno Deploy | |
ENABLE_ALLOW_UNKNOWN_KIND | no | Enable save unknown kind events | |
DISABLE_NIP11 | no | Disable handle NIP-11 request | |
SPAM_DETECT_PERCENT | no | Setup spam filter detect percentage, 0 to disable spam filter | 0.5 |
BOT_KEY | no, yes if enabled payment | Bot private key, in hex encoding, if you enabled payment for relay, you should setup this | |
BOT_NAME | no | Bot name | You relay's name + 's bot |
BOT_AVATAR | no | Bot picture | https://media-uploader.orzv.workers.dev/pomf2.lain.la/f/m4lnneh4.png |
BOT_RELAY | no, yes if enabled payment | You bot relay list | |
MAX_MESSAGE_LENGTH | no | Max message length per websocket send | 393216 -> 384KB |
MAX_SUBSCRIPTIONS | no | Max subscriptions per connection | 32 |
MAX_FILTER | no | Max filters per REQ subscription | 10 |
MAX_LIMIT | no | Max limit per filter | 500 |
MAX_SUBID_LENGTH | no | Max subscription id length | 64 |
MIN_PREFIX | no | Min prefix for ids and authors param | 32 |
MAX_EVENT_TAGS | no | Max tags per event | 2048 |
MAX_CONTENT_LENGTH | no | Max content length per event | 102400 -> 100KB |
MIN_POW_DIFFICULTY | no | Min NIP-13 PoW diffieculty | 0 |
AUTH_REQUIRED | no | Need auth for access | |
PAYMENT_REQUIRED | no | Need pay for access | |
NIPS | no | NIP-11 supported nips | 1,9,11,12,13,15,16,20,22,26,33,40,42 |
EVENT_RETENTION | no | NIP-11 event retention, in JSON format | [{"kinds":[1,4],"time":31536000,"count":5000},{"kinds":[6,7],"count":10000},{"kinds":[0,2,3],"count":1},{"count":1000}] |
EVENT_TIMESTAMP_RANGE | no | NIP-22 timestamp accepted range | -86400~300 -> one day ago to 5 minites later |
BROADCAST_RELAYS | no | Events broadcast to other relays, seperated by comma | |
WHITELIST_PUBKEYS | no | Whitelist pubkeys, seperated by comma | |
LANGUAGE_TAGS | no | NIP-11 language tags | |
TAGS | no | NIP-11 tags | |
POSTING_POLICY | no | NIP-11 posting policy url | |
PAYMENT_LNURL | no | Payment LNURL | |
FEES_ADMISSION | no | Fees for admission, unit sats, eg. 1000,2000,3000 | |
FEES_SUBSCRIPTION | no | Fees for subscription, unit sats, eg. 1000/2592000,2000/31536000 | |
FEES_PUBLICATION | no | Fees for publication, unit sats, eg. 1,2,3:10,4,10000:100 |