mirror of
https://github.com/aljazceru/haven.git
synced 2025-12-19 06:34:22 +01:00
use a single pool, refresh pubkeys dynamically, humbler blastr.
This commit is contained in:
17
blastr.go
17
blastr.go
@@ -3,22 +3,23 @@ package main
|
||||
import (
|
||||
"context"
|
||||
"log"
|
||||
"time"
|
||||
|
||||
"github.com/nbd-wtf/go-nostr"
|
||||
)
|
||||
|
||||
func blast(ev *nostr.Event) {
|
||||
ctx := context.Background()
|
||||
for _, relay := range config.BlastrRelays {
|
||||
go blastRoutine(ctx, relay, ev)
|
||||
}
|
||||
}
|
||||
|
||||
func blastRoutine(ctx context.Context, relay string, ev *nostr.Event) {
|
||||
connect, err := nostr.RelayConnect(ctx, relay)
|
||||
for _, url := range config.BlastrRelays {
|
||||
ctx, cancel := context.WithTimeout(ctx, time.Second*5)
|
||||
relay, err := pool.EnsureRelay(url)
|
||||
if err != nil {
|
||||
cancel()
|
||||
log.Println("error connecting to relay", relay, err)
|
||||
return
|
||||
}
|
||||
connect.Publish(ctx, *ev)
|
||||
relay.Publish(ctx, *ev)
|
||||
log.Println("🔫 blasted to", relay)
|
||||
cancel()
|
||||
}
|
||||
}
|
||||
|
||||
12
go.mod
12
go.mod
@@ -5,18 +5,19 @@ go 1.23.0
|
||||
toolchain go1.23.1
|
||||
|
||||
require (
|
||||
github.com/aws/aws-sdk-go-v2 v1.31.0
|
||||
github.com/aws/aws-sdk-go-v2/config v1.27.36
|
||||
github.com/aws/aws-sdk-go-v2/service/s3 v1.63.0
|
||||
github.com/fiatjaf/eventstore v0.9.0
|
||||
github.com/fiatjaf/khatru v0.8.1
|
||||
github.com/joho/godotenv v1.5.1
|
||||
github.com/nbd-wtf/go-nostr v0.37.2
|
||||
github.com/nbd-wtf/go-nostr v0.37.3
|
||||
github.com/puzpuzpuz/xsync/v3 v3.4.0
|
||||
)
|
||||
|
||||
require (
|
||||
github.com/PowerDNS/lmdb-go v1.9.2 // indirect
|
||||
github.com/andybalholm/brotli v1.0.5 // indirect
|
||||
github.com/aws/aws-sdk-go-v2 v1.31.0 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.5 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/config v1.27.36 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/credentials v1.17.34 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.14 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.18 // indirect
|
||||
@@ -27,7 +28,6 @@ require (
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.20 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.20 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.18 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/s3 v1.63.0 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/sso v1.23.0 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.27.0 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/sts v1.31.0 // indirect
|
||||
@@ -51,12 +51,10 @@ require (
|
||||
github.com/golang/protobuf v1.5.3 // indirect
|
||||
github.com/golang/snappy v0.0.4 // indirect
|
||||
github.com/google/flatbuffers v23.5.26+incompatible // indirect
|
||||
github.com/jmespath/go-jmespath v0.4.0 // indirect
|
||||
github.com/josharian/intern v1.0.0 // indirect
|
||||
github.com/klauspost/compress v1.17.8 // indirect
|
||||
github.com/mailru/easyjson v0.7.7 // indirect
|
||||
github.com/pkg/errors v0.9.1 // indirect
|
||||
github.com/puzpuzpuz/xsync/v3 v3.4.0 // indirect
|
||||
github.com/rs/cors v1.7.0 // indirect
|
||||
github.com/savsgio/gotils v0.0.0-20230208104028-c358bd845dee // indirect
|
||||
github.com/tidwall/gjson v1.17.3 // indirect
|
||||
|
||||
20
go.sum
20
go.sum
@@ -1,7 +1,5 @@
|
||||
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
|
||||
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
||||
github.com/PowerDNS/lmdb-go v1.9.2 h1:Cmgerh9y3ZKBZGz1irxSShhfmFyRUh+Zdk4cZk7ZJvU=
|
||||
github.com/PowerDNS/lmdb-go v1.9.2/go.mod h1:TE0l+EZK8Z1B4dx070ZxkWTlp8RG1mjN0/+FkFRQMtU=
|
||||
github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII=
|
||||
github.com/andybalholm/brotli v1.0.5 h1:8uQZIdzKmjc/iuPu7O2ioW48L81FgatrcpfFmiq/cCs=
|
||||
github.com/andybalholm/brotli v1.0.5/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig=
|
||||
@@ -66,7 +64,6 @@ github.com/btcsuite/snappy-go v1.0.0/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg
|
||||
github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY=
|
||||
github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs=
|
||||
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
|
||||
github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko=
|
||||
github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
|
||||
github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
|
||||
github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
|
||||
@@ -87,6 +84,7 @@ github.com/dgraph-io/badger/v4 v4.2.0 h1:kJrlajbXXL9DFTNuhhu9yCx7JJa4qpYWxtE8Bzu
|
||||
github.com/dgraph-io/badger/v4 v4.2.0/go.mod h1:qfCqhPoWDFJRx1gp5QwwyGo8xk1lbHUxvK9nK0OGAak=
|
||||
github.com/dgraph-io/ristretto v0.1.1 h1:6CWw5tJNgpegArSHpNHJKldNeq03FQCwYvfMVWajOK8=
|
||||
github.com/dgraph-io/ristretto v0.1.1/go.mod h1:S1GPSBCYCIhmVNfcth17y2zZtQT6wzkzgwUve0VDWWA=
|
||||
github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2 h1:tdlZCpZ/P9DhczCTSixgIKmwPv6+wP5DGjqLYw5SUiA=
|
||||
github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw=
|
||||
github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
|
||||
github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY=
|
||||
@@ -97,8 +95,6 @@ github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1m
|
||||
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
|
||||
github.com/fasthttp/websocket v1.5.7 h1:0a6o2OfeATvtGgoMKleURhLT6JqWPg7fYfWnH4KHau4=
|
||||
github.com/fasthttp/websocket v1.5.7/go.mod h1:bC4fxSono9czeXHQUVKxsC0sNjbm7lPJR04GDFqClfU=
|
||||
github.com/fiatjaf/eventstore v0.8.2 h1:nCa3UuJNV5Y5t+SDoPQe7PBmKJ6dhm9TQ/WyR4SCbIM=
|
||||
github.com/fiatjaf/eventstore v0.8.2/go.mod h1:ck3RxufitHUBjID1RLcRxfX+NMywQzMsdfNpSt6m+9U=
|
||||
github.com/fiatjaf/eventstore v0.9.0 h1:WsGDVAaRaVaV/J8PdrQDGfzChrL13q+lTO4C44rhu3E=
|
||||
github.com/fiatjaf/eventstore v0.9.0/go.mod h1:JrAce5h0wi79+Sw4gsEq5kz0NtUxbVkOZ7lAo7ay6R8=
|
||||
github.com/fiatjaf/khatru v0.8.1 h1:BWAZqwuT0272ZlyzPkuqAA0eGBOs5G3u0Dn1tlWrm6Q=
|
||||
@@ -144,13 +140,12 @@ github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/
|
||||
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
|
||||
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
|
||||
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
|
||||
github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI=
|
||||
github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI=
|
||||
github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg=
|
||||
github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=
|
||||
github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U=
|
||||
github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0=
|
||||
github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4=
|
||||
github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
|
||||
@@ -163,12 +158,8 @@ github.com/klauspost/compress v1.17.8 h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0N
|
||||
github.com/klauspost/compress v1.17.8/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw=
|
||||
github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
|
||||
github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
|
||||
github.com/nbd-wtf/go-nostr v0.35.0 h1:oINIBr5XE1kowkaz7NXC5vLvj2jUWH6xlzJjChpgV6Q=
|
||||
github.com/nbd-wtf/go-nostr v0.35.0/go.mod h1:NZQkxl96ggbO8rvDpVjcsojJqKTPwqhP4i82O7K5DJs=
|
||||
github.com/nbd-wtf/go-nostr v0.36.3 h1:50fNFO8vQNMEIZ+6qUq0M5hlqEtA13WrtrKcz10eg9k=
|
||||
github.com/nbd-wtf/go-nostr v0.36.3/go.mod h1:TGKGj00BmJRXvRe0LlpDN3KKbELhhPXgBwUEhzu3Oq0=
|
||||
github.com/nbd-wtf/go-nostr v0.37.2 h1:42rriFqqz07EdydERwYeQnewl+Rah1Gq46I+Wh0KYYg=
|
||||
github.com/nbd-wtf/go-nostr v0.37.2/go.mod h1:TGKGj00BmJRXvRe0LlpDN3KKbELhhPXgBwUEhzu3Oq0=
|
||||
github.com/nbd-wtf/go-nostr v0.37.3 h1:p/rrOWhaAk78UCVwzWtTN1C8WbP2k5eQV4HlpEYAeeA=
|
||||
github.com/nbd-wtf/go-nostr v0.37.3/go.mod h1:TGKGj00BmJRXvRe0LlpDN3KKbELhhPXgBwUEhzu3Oq0=
|
||||
github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
|
||||
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
||||
github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
||||
@@ -307,7 +298,6 @@ gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWD
|
||||
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
||||
|
||||
@@ -12,12 +12,13 @@ import (
|
||||
|
||||
const layout = "2006-01-02"
|
||||
|
||||
var ownerImportedNotes = 0
|
||||
var taggedImportedNotes = 0
|
||||
var (
|
||||
ownerImportedNotes = 0
|
||||
taggedImportedNotes = 0
|
||||
)
|
||||
|
||||
func importOwnerNotes() {
|
||||
ctx := context.Background()
|
||||
pool = nostr.NewSimplePool(ctx)
|
||||
wdb := eventstore.RelayWrapper{Store: &outboxDB}
|
||||
|
||||
startTime, err := time.Parse(layout, config.ImportStartDate)
|
||||
@@ -59,7 +60,6 @@ func importOwnerNotes() {
|
||||
|
||||
func importTaggedNotes() {
|
||||
ctx := context.Background()
|
||||
pool = nostr.NewSimplePool(ctx)
|
||||
wdb := eventstore.RelayWrapper{Store: &inboxDB}
|
||||
|
||||
startTime, err := time.Parse(layout, config.ImportStartDate)
|
||||
@@ -115,7 +115,6 @@ func importTaggedNotes() {
|
||||
func subscribeInbox() {
|
||||
ctx := context.Background()
|
||||
wdb := eventstore.RelayWrapper{Store: &inboxDB}
|
||||
pool = nostr.NewSimplePool(ctx)
|
||||
filters := []nostr.Filter{{
|
||||
Tags: nostr.TagMap{
|
||||
"p": {nPubToPubkey(config.OwnerNpub)},
|
||||
|
||||
14
main.go
14
main.go
@@ -13,10 +13,12 @@ import (
|
||||
"github.com/puzpuzpuz/xsync/v3"
|
||||
)
|
||||
|
||||
var mainRelay = khatru.NewRelay()
|
||||
var subRelays = xsync.NewMapOf[string, *khatru.Relay]()
|
||||
var pool *nostr.SimplePool
|
||||
var config = loadConfig()
|
||||
var (
|
||||
mainRelay = khatru.NewRelay()
|
||||
subRelays = xsync.NewMapOf[string, *khatru.Relay]()
|
||||
pool = nostr.NewSimplePool(context.Background())
|
||||
config = loadConfig()
|
||||
)
|
||||
|
||||
func main() {
|
||||
importFlag := flag.Bool("import", false, "Run the importNotes function after initializing relays")
|
||||
@@ -29,6 +31,7 @@ func main() {
|
||||
log.Println("🚀 haven is booting up")
|
||||
initRelays()
|
||||
|
||||
go func() {
|
||||
refreshTrustNetwork()
|
||||
|
||||
if *importFlag {
|
||||
@@ -40,9 +43,12 @@ func main() {
|
||||
|
||||
go subscribeInbox()
|
||||
go backupDatabase()
|
||||
}()
|
||||
|
||||
handler := http.HandlerFunc(dynamicRelayHandler)
|
||||
|
||||
chatRelay.ServiceURL = "http://localhost:3355/chat"
|
||||
|
||||
log.Printf("🔗 listening at http://localhost:3355")
|
||||
http.ListenAndServe("0.0.0.0:3355", handler)
|
||||
}
|
||||
|
||||
20
wot.go
20
wot.go
@@ -8,17 +8,17 @@ import (
|
||||
"github.com/nbd-wtf/go-nostr"
|
||||
)
|
||||
|
||||
var pubkeyFollowerCount = make(map[string]int)
|
||||
var oneHopNetwork []string
|
||||
var wot []string
|
||||
var wotRelays []string
|
||||
var wotMap map[string]bool
|
||||
var (
|
||||
pubkeyFollowerCount = make(map[string]int)
|
||||
oneHopNetwork []string
|
||||
wot []string
|
||||
wotRelays []string
|
||||
wotMap map[string]bool
|
||||
)
|
||||
|
||||
func refreshTrustNetwork() {
|
||||
|
||||
ctx := context.Background()
|
||||
timeoutCtx, cancel := context.WithTimeout(ctx, 3*time.Second)
|
||||
pool = nostr.NewSimplePool(ctx)
|
||||
|
||||
defer cancel()
|
||||
ownerPubkey := nPubToPubkey(config.OwnerNpub)
|
||||
@@ -69,7 +69,6 @@ func refreshTrustNetwork() {
|
||||
}
|
||||
|
||||
func appendRelay(relay string) {
|
||||
|
||||
for _, r := range wotRelays {
|
||||
if r == relay {
|
||||
return
|
||||
@@ -107,14 +106,15 @@ func appendOneHopNetwork(pubkey string) {
|
||||
}
|
||||
|
||||
func updateWoTMap() {
|
||||
wotMap = make(map[string]bool)
|
||||
wotMapTmp := make(map[string]bool)
|
||||
|
||||
for pubkey, count := range pubkeyFollowerCount {
|
||||
if count >= config.ChatRelayMinimumFollowers {
|
||||
wotMap[pubkey] = true
|
||||
wotMapTmp[pubkey] = true
|
||||
appendPubkeyToWoT(pubkey)
|
||||
}
|
||||
}
|
||||
|
||||
wotMap = wotMapTmp
|
||||
log.Println("🌐 pubkeys with minimum followers: ", len(wotMap), "keys")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user