Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/MutinyWallet/blastr
A nostr cloudflare workers proxy relay that publishes to all known relays
https://github.com/MutinyWallet/blastr
cloudflare nostr proxy relay rust wasm
Last synced: 24 days ago
JSON representation
A nostr cloudflare workers proxy relay that publishes to all known relays
- Host: GitHub
- URL: https://github.com/MutinyWallet/blastr
- Owner: MutinyWallet
- License: mit
- Created: 2023-02-18T01:26:09.000Z (almost 2 years ago)
- Default Branch: master
- Last Pushed: 2024-01-26T00:09:56.000Z (11 months ago)
- Last Synced: 2024-02-17T05:34:15.146Z (10 months ago)
- Topics: cloudflare, nostr, proxy, relay, rust, wasm
- Language: Rust
- Homepage: wss://nostr.mutinywallet.com
- Size: 167 KB
- Stars: 122
- Watchers: 2
- Forks: 11
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-nostr - blastr - A nostr cloudflare workers proxy relay that publishes to all known relays. (Tools / Client reviews and/or comparisons)
README
# blastr
A nostr cloudflare workers proxy relay that publishes to all known online relays.
![blastr diagram](./docs/images/blastr-diagram.png)
This takes advantage of the high availabilty of cloudflare serverless workers on the edge that are rust wasm-based with 0ms cold starts. Learn more about [cloudflare workers](https://workers.cloudflare.com/).
This is write only for now and is compatible with nostr clients but also features a simple POST api endpoint at `/event`. All events get queued up to run in batches by another worker that spins up every 30s if there's any events lined up, or once a certain amount of events are queued up.
This will help ensure that your events are broadcasted to as many places as possible.
## Development
With `wrangler`, you can build, test, and deploy your Worker with the following commands:
```sh
# install wrangler if you do not have it yet
$ npm install -g wrangler# log into cloudflare if you havent before
$ wrangler login# compiles your project to WebAssembly and will warn of any issues
$ npm run build# run your Worker in an ideal development workflow (with a local server, file watcher & more)
$ npm run dev# deploy your Worker globally to the Cloudflare network (update your wrangler.toml file for configuration)
$ npm run deploy
```## Staging
Production deployments happen automatically but staging is manually for now. Deploy whenever you need to test changes before merging to master.
```
wrangler publish --env staging
```### Setup
There's a few cloudflare components that Blastr uses behind the scenes, namely a KV store and multiple queues to distribute the load.
Right now some of these are hardcoded for us since they have to map from the `wrangler.toml` file to the rust codebase. Need a TODO for making this more dynamic.
#### KV store
This doesn't rebroadcast events that have already been broadcasted before. So we have a KV for that.
We also have a KV for storing the NWC requests and responses to get around ephemeral events.
```
wrangler kv:namespace create PUBLISHED_NOTES
wrangler kv:namespace create PUBLISHED_NOTES --previewwrangler kv:namespace create NWC_REQUESTS
wrangler kv:namespace create NWC_REQUESTS --previewwrangler kv:namespace create NWC_RESPONSES
wrangler kv:namespace create NWC_RESPONSES --preview
```#### Queues
```
wrangler queues create nostr-events-pub-1-b
wrangler queues create nostr-events-pub-2-b
wrangler queues create nostr-events-pub-3-b
wrangler queues create nostr-events-pub-4-b
wrangler queues create nostr-events-pub-5-b
wrangler queues create nostr-events-pub-6-b
wrangler queues create nostr-events-pub-7-b
wrangler queues create nostr-events-pub-8-b
wrangler queues create nostr-events-pub-9-b
wrangler queues create nostr-events-pub-10-b
```Read the latest `worker` crate documentation here: https://docs.rs/worker
### CICD
There's an example workflow here for publishing on master branch pushes. You need to set `CF_API_TOKEN` in your github repo secrets first.
You also should either remove or configure `wrangler.toml` to point to a custom domain of yours:
```
routes = [
{ pattern = "example.com/about", zone_id = "" } # replace with your info
]
```and any other info in `wrangler.toml` that is custom to you, like the names / id's of queues or kv's.
### WebAssembly
`workers-rs` (the Rust SDK for Cloudflare Workers used in this template) is meant to be executed as compiled WebAssembly, and as such so **must** all the code you write and depend upon. All crates and modules used in Rust-based Workers projects have to compile to the `wasm32-unknown-unknown` triple.
Read more about this on the [`workers-rs`](https://github.com/cloudflare/workers-rs) project README.