Documentation
¶
Overview ¶
Package main is a nostr relay with a simple follow/mute list authentication scheme and the new HTTP REST-based protocol. Configuration is via environment variables or an optional .env file.
Directories
¶
| Path | Synopsis |
|---|---|
|
cmd
|
|
|
benchmark
command
|
|
|
lerproxy
command
Command lerproxy implements https reverse proxy with automatic LetsEncrypt usage for multiple hostnames/backends,your own SSL certificates, nostr NIP-05 DNS verification hosting and Go vanity redirects.
|
Command lerproxy implements https reverse proxy with automatic LetsEncrypt usage for multiple hostnames/backends,your own SSL certificates, nostr NIP-05 DNS verification hosting and Go vanity redirects. |
|
lerproxy/buf
Package buf implements a simple concurrent safe buffer pool for raw bytes.
|
Package buf implements a simple concurrent safe buffer pool for raw bytes. |
|
lerproxy/hsts
Package hsts implements a HTTP handler that enforces HSTS.
|
Package hsts implements a HTTP handler that enforces HSTS. |
|
lerproxy/reverse
Package reverse is a copy of httputil.NewSingleHostReverseProxy with addition of "X-Forwarded-Proto" header.
|
Package reverse is a copy of httputil.NewSingleHostReverseProxy with addition of "X-Forwarded-Proto" header. |
|
lerproxy/tcpkeepalive
Package tcpkeepalive implements a net.TCPListener with a singleton set period for a default 3 minute keep-aline.
|
Package tcpkeepalive implements a net.TCPListener with a singleton set period for a default 3 minute keep-aline. |
|
lerproxy/timeout
Package timeout provides a simple extension of a net.TCPConn with a configurable read/write deadline.
|
Package timeout provides a simple extension of a net.TCPConn with a configurable read/write deadline. |
|
lerproxy/util
Package util provides some helpers for lerproxy, a tool to convert maps of strings to slices of the same strings, and a helper to avoid putting two / in a URL.
|
Package util provides some helpers for lerproxy, a tool to convert maps of strings to slices of the same strings, and a helper to avoid putting two / in a URL. |
|
nauth
command
|
|
|
nurl
command
Package main is a simple implementation of a cURL like tool that can do simple GET/POST operations on a HTTP server that understands NIP-98 authentication, with the signing key found in an environment variable.
|
Package main is a simple implementation of a cURL like tool that can do simple GET/POST operations on a HTTP server that understands NIP-98 authentication, with the signing key found in an environment variable. |
|
vainstr
command
Package main is a simple nostr key miner that uses the fast bitcoin secp256k1 C library to derive npubs with specified prefix/infix/suffix strings present.
|
Package main is a simple nostr key miner that uses the fast bitcoin secp256k1 C library to derive npubs with specified prefix/infix/suffix strings present. |
|
walletcli
command
|
|
|
walletcli/mock-wallet-service
command
|
|
|
pkg
|
|
|
app
Package app implements the orly nostr relay.
|
Package app implements the orly nostr relay. |
|
app/config
Package config provides a go-simpler.org/env configuration table and helpers for working with the list of key/value lists stored in .env files.
|
Package config provides a go-simpler.org/env configuration table and helpers for working with the list of key/value lists stored in .env files. |
|
app/relay/options
Package options provides some option configurations for the relay.
|
Package options provides some option configurations for the relay. |
|
crypto/ec
Package btcec implements support for the elliptic curves needed for bitcoin.
|
Package btcec implements support for the elliptic curves needed for bitcoin. |
|
crypto/ec/base58
Package base58 provides an API for working with modified base58 and Base58Check encodings.
|
Package base58 provides an API for working with modified base58 and Base58Check encodings. |
|
crypto/ec/bech32
Package bech32 provides a Go implementation of the bech32 format specified in BIP 173.
|
Package bech32 provides a Go implementation of the bech32 format specified in BIP 173. |
|
crypto/ec/chaincfg
Package chaincfg provides basic parameters for bitcoin chain and testnets.
|
Package chaincfg provides basic parameters for bitcoin chain and testnets. |
|
crypto/ec/chainhash
Package chainhash provides abstracted hash functionality.
|
Package chainhash provides abstracted hash functionality. |
|
crypto/ec/ecdsa
Package ecdsa provides secp256k1-optimized ECDSA signing and verification.
|
Package ecdsa provides secp256k1-optimized ECDSA signing and verification. |
|
crypto/ec/musig2
Package musig2 provides an implementation of the musig2 protocol for bitcoin.
|
Package musig2 provides an implementation of the musig2 protocol for bitcoin. |
|
crypto/ec/schnorr
Package schnorr provides custom Schnorr signing and verification via secp256k1.
|
Package schnorr provides custom Schnorr signing and verification via secp256k1. |
|
crypto/ec/secp256k1
Package secp256k1 implements optimized secp256k1 elliptic curve operations in pure Go.
|
Package secp256k1 implements optimized secp256k1 elliptic curve operations in pure Go. |
|
crypto/ec/secp256k1/precomps
command
Package main provides a generator for precomputed constants for secp256k1 signatures.
|
Package main provides a generator for precomputed constants for secp256k1 signatures. |
|
crypto/ec/taproot
Package taproot provides a collection of tools for encoding bitcoin taproot addresses.
|
Package taproot provides a collection of tools for encoding bitcoin taproot addresses. |
|
crypto/ec/wire
Package wire contains a set of data structure definitions for the bitcoin blockchain.
|
Package wire contains a set of data structure definitions for the bitcoin blockchain. |
|
crypto/encryption
Package encryption contains the message encryption schemes defined in NIP-04 and NIP-44, used for encrypting the content of nostr messages.
|
Package encryption contains the message encryption schemes defined in NIP-04 and NIP-44, used for encrypting the content of nostr messages. |
|
crypto/keys
Package keys is a set of helpers for generating and converting public/secret keys to hex and back to binary.
|
Package keys is a set of helpers for generating and converting public/secret keys to hex and back to binary. |
|
crypto/p256k
Package p256k is a signer interface that (by default) uses the bitcoin/libsecp256k1 library for fast signature creation and verification of the BIP-340 nostr X-only signatures and public keys, and ECDH.
|
Package p256k is a signer interface that (by default) uses the bitcoin/libsecp256k1 library for fast signature creation and verification of the BIP-340 nostr X-only signatures and public keys, and ECDH. |
|
crypto/sha256
Package sha256 is taken from github.com/minio/sha256-simd, implementing, where available, an accelerated SIMD implementation of sha256.
|
Package sha256 is taken from github.com/minio/sha256-simd, implementing, where available, an accelerated SIMD implementation of sha256. |
|
encoders/bech32encoding
Package bech32encoding implements NIP-19 entities, which are bech32 encoded data that describes nostr data types.
|
Package bech32encoding implements NIP-19 entities, which are bech32 encoded data that describes nostr data types. |
|
encoders/bech32encoding/pointers
Package pointers is a set of basic nip-19 data types for generating bech32 encoded nostr entities.
|
Package pointers is a set of basic nip-19 data types for generating bech32 encoded nostr entities. |
|
encoders/bech32encoding/tlv
Package tlv implements a simple Type Length Value encoder for nostr NIP-19 bech32 encoded entities.
|
Package tlv implements a simple Type Length Value encoder for nostr NIP-19 bech32 encoded entities. |
|
encoders/envelopes
Package envelopes provides common functions for marshaling and identifying nostr envelopes (JSON arrays containing protocol messages).
|
Package envelopes provides common functions for marshaling and identifying nostr envelopes (JSON arrays containing protocol messages). |
|
encoders/envelopes/authenvelope
Package authenvelope defines the auth challenge (relay message) and response (client message) of the NIP-42 authentication protocol.
|
Package authenvelope defines the auth challenge (relay message) and response (client message) of the NIP-42 authentication protocol. |
|
encoders/envelopes/closedenvelope
Package closedenvelope defines the nostr message type CLOSED which is sent from a relay to indicate the relay-side termination of a subscription or the demand for authentication associated with a subscription.
|
Package closedenvelope defines the nostr message type CLOSED which is sent from a relay to indicate the relay-side termination of a subscription or the demand for authentication associated with a subscription. |
|
encoders/envelopes/closeenvelope
Package closeenvelope provides the encoder for the client message CLOSE which is a request to terminate a subscription.
|
Package closeenvelope provides the encoder for the client message CLOSE which is a request to terminate a subscription. |
|
encoders/envelopes/countenvelope
Package countenvelope is an encoder for the COUNT request (client) and response (relay) message types.
|
Package countenvelope is an encoder for the COUNT request (client) and response (relay) message types. |
|
encoders/envelopes/eoseenvelope
Package eoseenvelope provides an encoder for the EOSE (End Of Stored Events) event that signifies that a REQ has found all stored events and from here on the request morphs into a subscription, until the limit, if requested, or until CLOSE or CLOSED.
|
Package eoseenvelope provides an encoder for the EOSE (End Of Stored Events) event that signifies that a REQ has found all stored events and from here on the request morphs into a subscription, until the limit, if requested, or until CLOSE or CLOSED. |
|
encoders/envelopes/eventenvelope
Package eventenvelope is a codec for the event Submission request EVENT envelope (client) and event Result (to a REQ) from a relay.
|
Package eventenvelope is a codec for the event Submission request EVENT envelope (client) and event Result (to a REQ) from a relay. |
|
encoders/envelopes/messages
Package messages is a collection of example/common messages and machine-readable prefixes to use with OK and CLOSED envelopes.
|
Package messages is a collection of example/common messages and machine-readable prefixes to use with OK and CLOSED envelopes. |
|
encoders/envelopes/noticeenvelope
Package noticeenvelope is a codec for the NOTICE envelope, which is used to serve (mostly ignored) messages that are supposed to be shown to a user in the client.
|
Package noticeenvelope is a codec for the NOTICE envelope, which is used to serve (mostly ignored) messages that are supposed to be shown to a user in the client. |
|
encoders/envelopes/okenvelope
Package okenvelope is a codec for the OK message, which is an acknowledgement for an EVENT eventenvelope.Submission, containing true/false and if false a message with a machine readable error type as found in the messages package.
|
Package okenvelope is a codec for the OK message, which is an acknowledgement for an EVENT eventenvelope.Submission, containing true/false and if false a message with a machine readable error type as found in the messages package. |
|
encoders/envelopes/reqenvelope
Package reqenvelope is a message from a client to a relay containing a subscription identifier and an array of filters to search for events.
|
Package reqenvelope is a message from a client to a relay containing a subscription identifier and an array of filters to search for events. |
|
encoders/event
Package event provides a codec for nostr events, for the wire format (with ID and signature), for the canonical form, that is hashed to generate the ID, and a fast binary form that uses io.Reader/io.Writer.
|
Package event provides a codec for nostr events, for the wire format (with ID and signature), for the canonical form, that is hashed to generate the ID, and a fast binary form that uses io.Reader/io.Writer. |
|
encoders/event/codectester
Package codectester is a tester to accept a large volume of (ostensibly valid) event data in a .jsonl (JSON line structured) file and categorize it into subsets that have failed at separate parts of the processing, a tool for testing the event codec.
|
Package codectester is a tester to accept a large volume of (ostensibly valid) event data in a .jsonl (JSON line structured) file and categorize it into subsets that have failed at separate parts of the processing, a tool for testing the event codec. |
|
encoders/event/codectester/divider
command
Package main is a tester that reads in a provided JSON line structured (.jsonl) document containing a set of events and attempts to parse them and prints out the events that failed various steps in the encode/decode process.
|
Package main is a tester that reads in a provided JSON line structured (.jsonl) document containing a set of events and attempts to parse them and prints out the events that failed various steps in the encode/decode process. |
|
encoders/event/examples
Package examples is an embedded jsonl format of a collection of events intended to be used to test an event codec.
|
Package examples is an embedded jsonl format of a collection of events intended to be used to test an event codec. |
|
encoders/eventid
Package eventid is a codec for managing nostr event Ids (hash of the canonical form of a nostr event).
|
Package eventid is a codec for managing nostr event Ids (hash of the canonical form of a nostr event). |
|
encoders/filter
Package filter is a codec for nostr filters (queries) and includes tools for matching them to events, a canonical format scheme to enable compactly identifying subscription filters, and a simplified filter that leavse out the IDs and Search fields for use in the HTTP API.
|
Package filter is a codec for nostr filters (queries) and includes tools for matching them to events, a canonical format scheme to enable compactly identifying subscription filters, and a simplified filter that leavse out the IDs and Search fields for use in the HTTP API. |
|
encoders/filters
Package filters is a set of tools for working with multiple nostr filters.
|
Package filters is a set of tools for working with multiple nostr filters. |
|
encoders/hex
Package hex is a set of aliases and helpers for using the templexxx SIMD hex encoder.
|
Package hex is a set of aliases and helpers for using the templexxx SIMD hex encoder. |
|
encoders/ints
Package ints is an optimised encoder for decimal numbers in ASCII format, that simplifies and accelerates encoding and decoding decimal strings.
|
Package ints is an optimised encoder for decimal numbers in ASCII format, that simplifies and accelerates encoding and decoding decimal strings. |
|
encoders/ints/gen
command
Package main is a generator for the base10000 (4 digit) encoding of the ints library.
|
Package main is a generator for the base10000 (4 digit) encoding of the ints library. |
|
encoders/kind
Package kind includes a type for convenient handling of event kinds, and a kind database with reverse lookup for human-readable information about event kinds.
|
Package kind includes a type for convenient handling of event kinds, and a kind database with reverse lookup for human-readable information about event kinds. |
|
encoders/kinds
Package kinds is a set of helpers for dealing with lists of kind numbers including comparisons and encoding.
|
Package kinds is a set of helpers for dealing with lists of kind numbers including comparisons and encoding. |
|
encoders/subscription
Package subscription is a set of helpers for managing nostr websocket subscription Ids, used with the REQ method to maintain an association between a REQ and resultant messages such as EVENT and CLOSED.
|
Package subscription is a set of helpers for managing nostr websocket subscription Ids, used with the REQ method to maintain an association between a REQ and resultant messages such as EVENT and CLOSED. |
|
encoders/tag
Package tag provides an implementation of a nostr tag list, an array of strings with a usually single letter first "key" field, including methods to compare, marshal/unmarshal and access elements with their proper semantics.
|
Package tag provides an implementation of a nostr tag list, an array of strings with a usually single letter first "key" field, including methods to compare, marshal/unmarshal and access elements with their proper semantics. |
|
encoders/tag/atag
Package atag implements a special, optimized handling for keeping a tags (address) in a more memory efficient form while working with these tags.
|
Package atag implements a special, optimized handling for keeping a tags (address) in a more memory efficient form while working with these tags. |
|
encoders/tags
Package tags provides a set of tools for composing and searching lists of tag.T as well as marshal/unmarshal to JSON.
|
Package tags provides a set of tools for composing and searching lists of tag.T as well as marshal/unmarshal to JSON. |
|
encoders/text
Package text is a collection of helpers for working with text inside nostr events such as implementing the string escaping scheme defined in NIP-01.
|
Package text is a collection of helpers for working with text inside nostr events such as implementing the string escaping scheme defined in NIP-01. |
|
encoders/timestamp
Package timestamp is a set of helpers for working with timestamps including encoding and conversion to various integer forms, from time.Time and varints.
|
Package timestamp is a set of helpers for working with timestamps including encoding and conversion to various integer forms, from time.Time and varints. |
|
encoders/varint
Package varint is a variable integer encoding that works in reverse compared to the stdlib binary Varint.
|
Package varint is a variable integer encoding that works in reverse compared to the stdlib binary Varint. |
|
interfaces/relay
Package relay contains a collection of server for enabling the building of modular nostr relay implementations.
|
Package relay contains a collection of server for enabling the building of modular nostr relay implementations. |
|
interfaces/signer
Package signer defines server for management of signatures, used to abstract the signature algorithm from the usage.
|
Package signer defines server for management of signatures, used to abstract the signature algorithm from the usage. |
|
interfaces/store
Package store is an interface and ancillary helpers and types for defining a series of API elements for abstracting the event storage from the implementation.
|
Package store is an interface and ancillary helpers and types for defining a series of API elements for abstracting the event storage from the implementation. |
|
interfaces/typer
Package typer is an interface for server to use to identify their type simply for aggregating multiple self-registered server such that the top level can recognise the type of a message and match it to the type of handler.
|
Package typer is an interface for server to use to identify their type simply for aggregating multiple self-registered server such that the top level can recognise the type of a message and match it to the type of handler. |
|
protocol/auth
Package auth implements NIP-42 authentication.
|
Package auth implements NIP-42 authentication. |
|
protocol/dns
Package dns is an implementation of the specification of NIP-05, providing DNS based verification for nostr identities.
|
Package dns is an implementation of the specification of NIP-05, providing DNS based verification for nostr identities. |
|
protocol/httpauth
Package httpauth provides helpers and encoders for nostr NIP-98 HTTP authentication header messages and a new JWT authentication message and delegation event kind 13004 that enables time limited expiring delegations of authentication (as with NIP-42 auth) for the HTTP API.
|
Package httpauth provides helpers and encoders for nostr NIP-98 HTTP authentication header messages and a new JWT authentication message and delegation event kind 13004 that enables time limited expiring delegations of authentication (as with NIP-42 auth) for the HTTP API. |
|
protocol/relayinfo
Package relayinfo defines the types and helpers for working with NIP-11 relay Information Document.
|
Package relayinfo defines the types and helpers for working with NIP-11 relay Information Document. |
|
protocol/ws
Package ws provides both relay and client websocket implementations, including a pool for fanning out to multiple relays and managing subscriptions.
|
Package ws provides both relay and client websocket implementations, including a pool for fanning out to multiple relays and managing subscriptions. |
|
tests
Package tests provides a tool to generate arbitrary random events for fuzz testing the encoder.
|
Package tests provides a tool to generate arbitrary random events for fuzz testing the encoder. |
|
utils/apputil
Package apputil provides utility functions for file and directory operations.
|
Package apputil provides utility functions for file and directory operations. |
|
utils/atomic
Package atomic provides simple wrappers around numerics to enforce atomic access.
|
Package atomic provides simple wrappers around numerics to enforce atomic access. |
|
utils/atomic/internal/gen-atomicint
command
gen-atomicint generates an atomic wrapper around an integer type.
|
gen-atomicint generates an atomic wrapper around an integer type. |
|
utils/atomic/internal/gen-atomicwrapper
command
gen-atomicwrapper generates wrapper types around other atomic types.
|
gen-atomicwrapper generates wrapper types around other atomic types. |
|
utils/chk
Package chk is a convenience shortcut to use shorter names to access the lol.Logger.
|
Package chk is a convenience shortcut to use shorter names to access the lol.Logger. |
|
utils/context
Package context is a set of shorter names for the very stuttery context library.
|
Package context is a set of shorter names for the very stuttery context library. |
|
utils/env
Package env is an implementation of the env.Source interface from go-simpler.org
|
Package env is an implementation of the env.Source interface from go-simpler.org |
|
utils/errorf
Package errorf is a convenience shortcut to use shorter names to access the lol.Logger.
|
Package errorf is a convenience shortcut to use shorter names to access the lol.Logger. |
|
utils/interrupt
Package interrupt is a library for providing handling for Ctrl-C/Interrupt handling and triggering callbacks for such things as closing files, flushing buffers, and other elements of graceful shutdowns.
|
Package interrupt is a library for providing handling for Ctrl-C/Interrupt handling and triggering callbacks for such things as closing files, flushing buffers, and other elements of graceful shutdowns. |
|
utils/iptracker
Package iptracker provides functionality to track and block IP addresses based on failed authentication attempts.
|
Package iptracker provides functionality to track and block IP addresses based on failed authentication attempts. |
|
utils/log
Package log is a convenience shortcut to use shorter names to access the lol.Logger.
|
Package log is a convenience shortcut to use shorter names to access the lol.Logger. |
|
utils/lol
Package lol (log of location) is a simple logging library that prints a high precision unix timestamp and the source location of a log print to make tracing errors simpler.
|
Package lol (log of location) is a simple logging library that prints a high precision unix timestamp and the source location of a log print to make tracing errors simpler. |
|
utils/normalize
Package normalize is a set of tools for cleaning up URL s and formatting nostr OK and CLOSED messages.
|
Package normalize is a set of tools for cleaning up URL s and formatting nostr OK and CLOSED messages. |
|
utils/number
Package number implements a simple number list, used with relayinfo package for NIP support lists.
|
Package number implements a simple number list, used with relayinfo package for NIP support lists. |
|
utils/qu
Package qu is a library for making handling signal (chan struct{}) channels simpler, as well as monitoring the state of the signal channels in an application.
|
Package qu is a library for making handling signal (chan struct{}) channels simpler, as well as monitoring the state of the signal channels in an application. |
|
utils/units
Package units is a convenient set of names designating data sizes in bytes using common ISO names (base 10).
|
Package units is a convenient set of names designating data sizes in bytes using common ISO names (base 10). |
Click to show internal directories.
Click to hide internal directories.