Skip to content

Commit

Permalink
provide basic local relay function
Browse files Browse the repository at this point in the history
  • Loading branch information
shuesken committed Oct 9, 2024
1 parent d32da39 commit bfa086c
Show file tree
Hide file tree
Showing 6 changed files with 283 additions and 0 deletions.
1 change: 1 addition & 0 deletions develoment-utils/local-relay/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
db/
217 changes: 217 additions & 0 deletions develoment-utils/local-relay/config.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,217 @@
# Nostr-rs-relay configuration

[info]
# The advertised URL for the Nostr websocket.
relay_url = "wss://nostr.example.com/"

# Relay information for clients. Put your unique server name here.
name = "nostr-rs-relay"

# Description
description = "A newly created nostr-rs-relay.\n\nCustomize this with your own info."

# Administrative contact pubkey
#pubkey = "0c2d168a4ae8ca58c9f1ab237b5df682599c6c7ab74307ea8b05684b60405d41"

# Administrative contact URI
#contact = "mailto:[email protected]"

# Favicon location. Relative to the current directory. Assumes an
# ICO format.
#favicon = "favicon.ico"

[diagnostics]
# Enable tokio tracing (for use with tokio-console)
#tracing = false

[database]
# Database engine (sqlite/postgres). Defaults to sqlite.
# Support for postgres is currently experimental.
#engine = "sqlite"

# Directory for SQLite files. Defaults to the current directory. Can
# also be specified (and overriden) with the "--db dirname" command
# line option.
#data_directory = "."

# Use an in-memory database instead of 'nostr.db'.
# Requires sqlite engine.
# Caution; this will not survive a process restart!
#in_memory = false

# Database connection pool settings for subscribers:

# Minimum number of SQLite reader connections
#min_conn = 4

# Maximum number of SQLite reader connections. Recommend setting this
# to approx the number of cores.
#max_conn = 8

# Database connection string. Required for postgres; not used for
# sqlite.
#connection = "postgresql://postgres:nostr@localhost:7500/nostr"


[grpc]
# gRPC interfaces for externalized decisions and other extensions to
# functionality.
#
# Events can be authorized through an external service, by providing
# the URL below. In the event the server is not accessible, events
# will be permitted. The protobuf3 schema used is available in
# `proto/nauthz.proto`.
# event_admission_server = "http://[::1]:50051"

[network]
# Bind to this network address
address = "0.0.0.0"

# Listen on this port
port = 8080

# If present, read this HTTP header for logging client IP addresses.
# Examples for common proxies, cloudflare:
#remote_ip_header = "x-forwarded-for"
#remote_ip_header = "cf-connecting-ip"

# Websocket ping interval in seconds, defaults to 5 minutes
#ping_interval = 300

[options]
# Reject events that have timestamps greater than this many seconds in
# the future. Recommended to reject anything greater than 30 minutes
# from the current time, but the default is to allow any date.
reject_future_seconds = 1800

[limits]
# Limit events created per second, averaged over one minute. Must be
# an integer. If not set (or set to 0), there is no limit. Note:
# this is for the server as a whole, not per-connection.
#
# Limiting event creation is highly recommended if your relay is
# public!
#
#messages_per_sec = 5

# Limit client subscriptions created, averaged over one minute. Must
# be an integer. If not set (or set to 0), defaults to unlimited.
# Strongly recommended to set this to a low value such as 10 to ensure
# fair service.
#subscriptions_per_min = 0

# UNIMPLEMENTED...
# Limit how many concurrent database connections a client can have.
# This prevents a single client from starting too many expensive
# database queries. Must be an integer. If not set (or set to 0),
# defaults to unlimited (subject to subscription limits).
#db_conns_per_client = 0

# Limit blocking threads used for database connections. Defaults to 16.
#max_blocking_threads = 16

# Limit the maximum size of an EVENT message. Defaults to 128 KB.
# Set to 0 for unlimited.
#max_event_bytes = 131072

# Maximum WebSocket message in bytes. Defaults to 128 KB.
#max_ws_message_bytes = 131072

# Maximum WebSocket frame size in bytes. Defaults to 128 KB.
#max_ws_frame_bytes = 131072

# Broadcast buffer size, in number of events. This prevents slow
# readers from consuming memory.
#broadcast_buffer = 16384

# Event persistence buffer size, in number of events. This provides
# backpressure to senders if writes are slow.
#event_persist_buffer = 4096

# Event kind blacklist. Events with these kinds will be discarded.
#event_kind_blacklist = [
# 70202,
#]

# Event kind allowlist. Events other than these kinds will be discarded.
#event_kind_allowlist = [
# 0, 1, 2, 3, 7, 40, 41, 42, 43, 44, 30023,
#]

[authorization]
# Pubkey addresses in this array are whitelisted for event publishing.
# Only valid events by these authors will be accepted, if the variable
# is set.
#pubkey_whitelist = [
# "35d26e4690cbe1a898af61cc3515661eb5fa763b57bd0b42e45099c8b32fd50f",
# "887645fef0ce0c3c1218d2f5d8e6132a19304cdc57cd20281d082f38cfea0072",
#]
# Enable NIP-42 authentication
#nip42_auth = false
# Send DMs events (kind 4) only to their authenticated recipients
#nip42_dms = false

[verified_users]
# NIP-05 verification of users. Can be "enabled" to require NIP-05
# metadata for event authors, "passive" to perform validation but
# never block publishing, or "disabled" to do nothing.
#mode = "disabled"

# Domain names that will be prevented from publishing events.
#domain_blacklist = ["wellorder.net"]

# Domain names that are allowed to publish events. If defined, only
# events NIP-05 verified authors at these domains are persisted.
#domain_whitelist = ["example.com"]

# Consider an pubkey "verified" if we have a successful validation
# from the NIP-05 domain within this amount of time. Note, if the
# domain provides a successful response that omits the account,
# verification is immediately revoked.
#verify_expiration = "1 week"

# How long to wait between verification attempts for a specific author.
#verify_update_frequency = "24 hours"

# How many consecutive failed checks before we give up on verifying
# this author.
#max_consecutive_failures = 20

[pay_to_relay]
# Enable pay to relay
#enabled = false

# The cost to be admitted to relay
#admission_cost = 4200

# The cost in sats per post
#cost_per_event = 0

# Url of lnbits api
#node_url = "<node url>"

# LNBits api secret
#api_secret = "<ln bits api>"

# Terms of service
#terms_message = """
#This service (and supporting services) are provided "as is", without warranty of any kind, express or implied.
#
#By using this service, you agree:
#* Not to engage in spam or abuse the relay service
#* Not to disseminate illegal content
#* That requests to delete content cannot be guaranteed
#* To use the service in compliance with all applicable laws
#* To grant necessary rights to your content for unlimited time
#* To be of legal age and have capacity to use this service
#* That the service may be terminated at any time without notice
#* That the content you publish may be removed at any time without notice
#* To have your IP address collected to detect abuse or misuse
#* To cooperate with the relay to combat abuse or misuse
#* You may be exposed to content that you might find triggering or distasteful
#* The relay operator is not liable for content produced by users of the relay
#"""

# Whether or not new sign ups should be allowed
#sign_ups = false
#secret_key = "<nostr nsec>"
14 changes: 14 additions & 0 deletions develoment-utils/local-relay/deno.jsonc
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"tasks": {
"pull": "docker pull scsibug/nostr-rs-relay:latest",

// run the server without any content on port 7000
"run": "deno task pull; docker run -it -p 7000:8080 --name my-relay scsibug/nostr-rs-relay:latest",

// run the server with seed data on port 7000
"run-with-seed": "deno task pull; cp -r ./seed-data/seed-db ./seed-data/db; docker run -it -p 7000:8080 --mount src=$(pwd)/config.toml,target=/usr/src/app/config.toml,type=bind --mount src=$(pwd)/seed-data/db,target=/usr/src/app/db,type=bind --name my-relay scsibug/nostr-rs-relay:latest",

// generates a new seed db from the events writte in seed-data.ts.
"build-seed-from-event-list": "deno task run; deno run --allow-net send-seed-data-to-relay.ts; sleep 3; docker cp my-relay:/usr/src/app/db/nostr.db $(pwd)/seed-data/seed-db/nostr.db"
}
}
40 changes: 40 additions & 0 deletions develoment-utils/local-relay/seed-data/seed-data.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
export const events = [
{
content: "Small community, happy to host folks, contact us on trustroots.",
created_at: 1723391984,
id: "da0de42156741aa176dfd4b42d34b26cf5442fbbe88ade2acbcf8b98d86485d3",
kind: 30398,
pubkey: "f5bc71692fc08ea52c0d1c8bcfb87579584106b5feb4ea542b1b8a95612f257b",
sig: "37a6c57a37961059d322cf3fb4e0e6efd9b3512a7d48e807ecb55ed0787b8c509c2cb4a6b23dabbf2088ae83e6495931370432d449f2d81451a1d9e15de98d1d",
tags: [
["e", "ef07341941193dd05324dc7d420d8dad8f755150a2df9cf449d405e59fb3ca69"],
["p", "915843820a0744224b1cc80907db3e39989577d76a4561de76d4d24c3fe60f86"],
[
"d",
"915843820a0744224b1cc80907db3e39989577d76a4561de76d4d24c3fe60f86:ef07341941193dd05324dc7d420d8dad8f755150a2df9cf449d405e59fb3ca69",
],
["original_created_at", "1723314980"],
["L", "open-location-code"],
["l", "9F4J4CCH+65", "open-location-code"],
],
},
{
content: "Beautiful community garden",
created_at: 1723314772,
id: "9254eb6b245b9e0bb10d6eb87696156568457d354784f59242be9e01a30632e2",
kind: 30398,
pubkey: "f5bc71692fc08ea52c0d1c8bcfb87579584106b5feb4ea542b1b8a95612f257b",
sig: "cf48f480045c66cd27445bc12f86c033ba9c080e7bd559d03d1f3f9c53f60db1d2363d34ef1158364263cfca8fc45adcb6acb48a61a6a77e8f26bdd038ac4ba4",
tags: [
["e", "3bb9aeadfca045149ec05ad0ef2956c5df49cae253e97e79f33e7710b65a3e95"],
["p", "c5f7ec409bd40fbb63934306ccf3d56d319a559f2c193d8f5368ff2bca252804"],
[
"d",
"c5f7ec409bd40fbb63934306ccf3d56d319a559f2c193d8f5368ff2bca252804:3bb9aeadfca045149ec05ad0ef2956c5df49cae253e97e79f33e7710b65a3e95",
],
["original_created_at", "1723285703"],
["L", "open-location-code"],
["l", "9F4MFCF8+RP", "open-location-code"],
],
},
];
Binary file not shown.
11 changes: 11 additions & 0 deletions develoment-utils/local-relay/seed-data/send-seed-data-to-relay.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import { NRelay1 } from "jsr:@nostrify/nostrify@^0.30.0";

import { events } from "./seed-data.ts";

const relay = new NRelay1("ws://localhost:7000");

for (const event of events) {
await relay.event(event);
}

Deno.exit();

0 comments on commit bfa086c

Please sign in to comment.