upgrades, add some policies
This commit is contained in:
parent
ccbc497734
commit
0f5042a5e6
13 changed files with 84 additions and 47 deletions
8
go.mod
8
go.mod
|
@ -4,11 +4,11 @@ go 1.23.1
|
||||||
|
|
||||||
require (
|
require (
|
||||||
git.devvul.com/asara/gologger v0.8.0
|
git.devvul.com/asara/gologger v0.8.0
|
||||||
github.com/fiatjaf/eventstore v0.9.0
|
github.com/fiatjaf/eventstore v0.9.1
|
||||||
github.com/fiatjaf/khatru v0.8.1
|
github.com/fiatjaf/khatru v0.8.1
|
||||||
github.com/jmoiron/sqlx v1.4.0
|
github.com/jmoiron/sqlx v1.4.0
|
||||||
github.com/lib/pq v1.10.9
|
github.com/lib/pq v1.10.9
|
||||||
github.com/nbd-wtf/go-nostr v0.36.1
|
github.com/nbd-wtf/go-nostr v0.37.2
|
||||||
)
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
|
@ -25,7 +25,7 @@ require (
|
||||||
github.com/klauspost/compress v1.17.8 // indirect
|
github.com/klauspost/compress v1.17.8 // indirect
|
||||||
github.com/mailru/easyjson v0.7.7 // indirect
|
github.com/mailru/easyjson v0.7.7 // indirect
|
||||||
github.com/mattn/go-colorable v0.1.13 // indirect
|
github.com/mattn/go-colorable v0.1.13 // indirect
|
||||||
github.com/mattn/go-isatty v0.0.19 // indirect
|
github.com/mattn/go-isatty v0.0.20 // indirect
|
||||||
github.com/puzpuzpuz/xsync/v3 v3.4.0 // indirect
|
github.com/puzpuzpuz/xsync/v3 v3.4.0 // indirect
|
||||||
github.com/rs/cors v1.7.0 // indirect
|
github.com/rs/cors v1.7.0 // indirect
|
||||||
github.com/rs/zerolog v1.33.0 // indirect
|
github.com/rs/zerolog v1.33.0 // indirect
|
||||||
|
@ -36,6 +36,6 @@ require (
|
||||||
github.com/valyala/bytebufferpool v1.0.0 // indirect
|
github.com/valyala/bytebufferpool v1.0.0 // indirect
|
||||||
github.com/valyala/fasthttp v1.51.0 // indirect
|
github.com/valyala/fasthttp v1.51.0 // indirect
|
||||||
golang.org/x/exp v0.0.0-20240909161429-701f63a606c0 // indirect
|
golang.org/x/exp v0.0.0-20240909161429-701f63a606c0 // indirect
|
||||||
golang.org/x/net v0.18.0 // indirect
|
golang.org/x/net v0.21.0 // indirect
|
||||||
golang.org/x/sys v0.25.0 // indirect
|
golang.org/x/sys v0.25.0 // indirect
|
||||||
)
|
)
|
||||||
|
|
15
go.sum
15
go.sum
|
@ -17,8 +17,8 @@ github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0 h1:rpfIENRNNilwHwZeG5+P150SMrnN
|
||||||
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0/go.mod h1:v57UDF4pDQJcEfFUCRop3lJL149eHGSe9Jvczhzjo/0=
|
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0/go.mod h1:v57UDF4pDQJcEfFUCRop3lJL149eHGSe9Jvczhzjo/0=
|
||||||
github.com/fasthttp/websocket v1.5.7 h1:0a6o2OfeATvtGgoMKleURhLT6JqWPg7fYfWnH4KHau4=
|
github.com/fasthttp/websocket v1.5.7 h1:0a6o2OfeATvtGgoMKleURhLT6JqWPg7fYfWnH4KHau4=
|
||||||
github.com/fasthttp/websocket v1.5.7/go.mod h1:bC4fxSono9czeXHQUVKxsC0sNjbm7lPJR04GDFqClfU=
|
github.com/fasthttp/websocket v1.5.7/go.mod h1:bC4fxSono9czeXHQUVKxsC0sNjbm7lPJR04GDFqClfU=
|
||||||
github.com/fiatjaf/eventstore v0.9.0 h1:WsGDVAaRaVaV/J8PdrQDGfzChrL13q+lTO4C44rhu3E=
|
github.com/fiatjaf/eventstore v0.9.1 h1:dLum4W6NOkDXMgckjj5lLfKrRVW8oN3zS7tfbXzGxJg=
|
||||||
github.com/fiatjaf/eventstore v0.9.0/go.mod h1:JrAce5h0wi79+Sw4gsEq5kz0NtUxbVkOZ7lAo7ay6R8=
|
github.com/fiatjaf/eventstore v0.9.1/go.mod h1:h5CdLSF7mEQ7/rWpEABTRIrNuFoSwdQDi/nZkW/vVFU=
|
||||||
github.com/fiatjaf/khatru v0.8.1 h1:BWAZqwuT0272ZlyzPkuqAA0eGBOs5G3u0Dn1tlWrm6Q=
|
github.com/fiatjaf/khatru v0.8.1 h1:BWAZqwuT0272ZlyzPkuqAA0eGBOs5G3u0Dn1tlWrm6Q=
|
||||||
github.com/fiatjaf/khatru v0.8.1/go.mod h1:jRmqbbIbEH+y0unt3wMUBwqY/btVussqx5SmBoGhXtg=
|
github.com/fiatjaf/khatru v0.8.1/go.mod h1:jRmqbbIbEH+y0unt3wMUBwqY/btVussqx5SmBoGhXtg=
|
||||||
github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y=
|
github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y=
|
||||||
|
@ -43,12 +43,13 @@ github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJ
|
||||||
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
|
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
|
||||||
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
|
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
|
||||||
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
|
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
|
||||||
github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA=
|
|
||||||
github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
|
github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
|
||||||
|
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
|
||||||
|
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
|
||||||
github.com/mattn/go-sqlite3 v1.14.22 h1:2gZY6PC6kBnID23Tichd1K+Z0oS6nE/XwU+Vz/5o4kU=
|
github.com/mattn/go-sqlite3 v1.14.22 h1:2gZY6PC6kBnID23Tichd1K+Z0oS6nE/XwU+Vz/5o4kU=
|
||||||
github.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y=
|
github.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y=
|
||||||
github.com/nbd-wtf/go-nostr v0.36.1 h1:FdLjHpgXhLfhIjVFpYlQ2AVDUJkpOpXRs3LrkpUh32c=
|
github.com/nbd-wtf/go-nostr v0.37.2 h1:42rriFqqz07EdydERwYeQnewl+Rah1Gq46I+Wh0KYYg=
|
||||||
github.com/nbd-wtf/go-nostr v0.36.1/go.mod h1:g21TyEpFBmbP7fb8Mc99R1oD76hsyVcQ1rMYCasgU6A=
|
github.com/nbd-wtf/go-nostr v0.37.2/go.mod h1:TGKGj00BmJRXvRe0LlpDN3KKbELhhPXgBwUEhzu3Oq0=
|
||||||
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||||
|
@ -76,8 +77,8 @@ github.com/valyala/fasthttp v1.51.0 h1:8b30A5JlZ6C7AS81RsWjYMQmrZG6feChmgAolCl1S
|
||||||
github.com/valyala/fasthttp v1.51.0/go.mod h1:oI2XroL+lI7vdXyYoQk03bXBThfFl2cVdIA3Xl7cH8g=
|
github.com/valyala/fasthttp v1.51.0/go.mod h1:oI2XroL+lI7vdXyYoQk03bXBThfFl2cVdIA3Xl7cH8g=
|
||||||
golang.org/x/exp v0.0.0-20240909161429-701f63a606c0 h1:e66Fs6Z+fZTbFBAxKfP3PALWBtpfqks2bwGcexMxgtk=
|
golang.org/x/exp v0.0.0-20240909161429-701f63a606c0 h1:e66Fs6Z+fZTbFBAxKfP3PALWBtpfqks2bwGcexMxgtk=
|
||||||
golang.org/x/exp v0.0.0-20240909161429-701f63a606c0/go.mod h1:2TbTHSBQa924w8M6Xs1QcRcFwyucIwBGpK1p2f1YFFY=
|
golang.org/x/exp v0.0.0-20240909161429-701f63a606c0/go.mod h1:2TbTHSBQa924w8M6Xs1QcRcFwyucIwBGpK1p2f1YFFY=
|
||||||
golang.org/x/net v0.18.0 h1:mIYleuAkSbHh0tCv7RvjL3F6ZVbLjq4+R7zbOn3Kokg=
|
golang.org/x/net v0.21.0 h1:AQyQV4dYCvJ7vGmJyKki9+PBdyvhkSd8EIx/qb0AYv4=
|
||||||
golang.org/x/net v0.18.0/go.mod h1:/czyP5RqHAH4odGYxBJ1qz0+CE5WZ+2j1YgoEo8F2jQ=
|
golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44=
|
||||||
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
|
|
@ -67,6 +67,8 @@ func NewRelay(version string) *khatru.Relay {
|
||||||
relay.RejectFilter = append(
|
relay.RejectFilter = append(
|
||||||
relay.RejectFilter,
|
relay.RejectFilter,
|
||||||
policies.RejectKind04Snoopers,
|
policies.RejectKind04Snoopers,
|
||||||
|
policies.NoEmptyFilters,
|
||||||
|
policies.NoComplexFilters,
|
||||||
)
|
)
|
||||||
|
|
||||||
return relay
|
return relay
|
||||||
|
|
2
vendor/github.com/fiatjaf/eventstore/.gitignore
generated
vendored
2
vendor/github.com/fiatjaf/eventstore/.gitignore
generated
vendored
|
@ -1,2 +0,0 @@
|
||||||
cmd/eventstore/eventstore
|
|
||||||
eventstore
|
|
2
vendor/github.com/fiatjaf/eventstore/postgresql/query.go
generated
vendored
2
vendor/github.com/fiatjaf/eventstore/postgresql/query.go
generated
vendored
|
@ -132,7 +132,7 @@ func (b PostgresBackend) queryEventsSql(filter nostr.Filter, doCount bool) (stri
|
||||||
params = append(params, tagValue)
|
params = append(params, tagValue)
|
||||||
}
|
}
|
||||||
|
|
||||||
conditions = append(conditions, `tagvalues <@ ARRAY[`+makePlaceHolders(len(tagQuery))+`]`)
|
conditions = append(conditions, `tagvalues && ARRAY[`+makePlaceHolders(len(tagQuery))+`]`)
|
||||||
}
|
}
|
||||||
|
|
||||||
if filter.Since != nil {
|
if filter.Since != nil {
|
||||||
|
|
3
vendor/github.com/mattn/go-isatty/isatty_bsd.go
generated
vendored
3
vendor/github.com/mattn/go-isatty/isatty_bsd.go
generated
vendored
|
@ -1,6 +1,7 @@
|
||||||
//go:build (darwin || freebsd || openbsd || netbsd || dragonfly || hurd) && !appengine
|
//go:build (darwin || freebsd || openbsd || netbsd || dragonfly || hurd) && !appengine && !tinygo
|
||||||
// +build darwin freebsd openbsd netbsd dragonfly hurd
|
// +build darwin freebsd openbsd netbsd dragonfly hurd
|
||||||
// +build !appengine
|
// +build !appengine
|
||||||
|
// +build !tinygo
|
||||||
|
|
||||||
package isatty
|
package isatty
|
||||||
|
|
||||||
|
|
5
vendor/github.com/mattn/go-isatty/isatty_others.go
generated
vendored
5
vendor/github.com/mattn/go-isatty/isatty_others.go
generated
vendored
|
@ -1,5 +1,6 @@
|
||||||
//go:build appengine || js || nacl || wasm
|
//go:build (appengine || js || nacl || tinygo || wasm) && !windows
|
||||||
// +build appengine js nacl wasm
|
// +build appengine js nacl tinygo wasm
|
||||||
|
// +build !windows
|
||||||
|
|
||||||
package isatty
|
package isatty
|
||||||
|
|
||||||
|
|
3
vendor/github.com/mattn/go-isatty/isatty_tcgets.go
generated
vendored
3
vendor/github.com/mattn/go-isatty/isatty_tcgets.go
generated
vendored
|
@ -1,6 +1,7 @@
|
||||||
//go:build (linux || aix || zos) && !appengine
|
//go:build (linux || aix || zos) && !appengine && !tinygo
|
||||||
// +build linux aix zos
|
// +build linux aix zos
|
||||||
// +build !appengine
|
// +build !appengine
|
||||||
|
// +build !tinygo
|
||||||
|
|
||||||
package isatty
|
package isatty
|
||||||
|
|
||||||
|
|
21
vendor/github.com/nbd-wtf/go-nostr/event.go
generated
vendored
21
vendor/github.com/nbd-wtf/go-nostr/event.go
generated
vendored
|
@ -141,3 +141,24 @@ func (evt *Event) Sign(privateKey string, signOpts ...schnorr.SignOption) error
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// IsRegular checks if the given kind is in Regular range.
|
||||||
|
func (evt *Event) IsRegular() bool {
|
||||||
|
return evt.Kind < 10000 && evt.Kind != 0 && evt.Kind != 3
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsReplaceable checks if the given kind is in Replaceable range.
|
||||||
|
func (evt *Event) IsReplaceable() bool {
|
||||||
|
return evt.Kind == 0 || evt.Kind == 3 ||
|
||||||
|
(10000 <= evt.Kind && evt.Kind < 20000)
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsEphemeral checks if the given kind is in Ephemeral range.
|
||||||
|
func (evt *Event) IsEphemeral() bool {
|
||||||
|
return 20000 <= evt.Kind && evt.Kind < 30000
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsAddressable checks if the given kind is in Addressable range.
|
||||||
|
func (evt *Event) IsAddressable() bool {
|
||||||
|
return 30000 <= evt.Kind && evt.Kind < 40000
|
||||||
|
}
|
||||||
|
|
2
vendor/github.com/nbd-wtf/go-nostr/kinds.go
generated
vendored
2
vendor/github.com/nbd-wtf/go-nostr/kinds.go
generated
vendored
|
@ -4,7 +4,7 @@ const (
|
||||||
KindProfileMetadata int = 0
|
KindProfileMetadata int = 0
|
||||||
KindTextNote int = 1
|
KindTextNote int = 1
|
||||||
KindRecommendServer int = 2
|
KindRecommendServer int = 2
|
||||||
KindContactList int = 3
|
KindFollowList int = 3
|
||||||
KindEncryptedDirectMessage int = 4
|
KindEncryptedDirectMessage int = 4
|
||||||
KindDeletion int = 5
|
KindDeletion int = 5
|
||||||
KindRepost int = 6
|
KindRepost int = 6
|
||||||
|
|
53
vendor/github.com/nbd-wtf/go-nostr/pool.go
generated
vendored
53
vendor/github.com/nbd-wtf/go-nostr/pool.go
generated
vendored
|
@ -21,10 +21,10 @@ type SimplePool struct {
|
||||||
Relays *xsync.MapOf[string, *Relay]
|
Relays *xsync.MapOf[string, *Relay]
|
||||||
Context context.Context
|
Context context.Context
|
||||||
|
|
||||||
authHandler func(*Event) error
|
authHandler func(context.Context, RelayEvent) error
|
||||||
cancel context.CancelFunc
|
cancel context.CancelFunc
|
||||||
|
|
||||||
eventMiddleware []func(IncomingEvent)
|
eventMiddleware []func(RelayEvent)
|
||||||
|
|
||||||
// custom things not often used
|
// custom things not often used
|
||||||
signatureChecker func(Event) bool
|
signatureChecker func(Event) bool
|
||||||
|
@ -37,12 +37,12 @@ type DirectedFilters struct {
|
||||||
Relay string
|
Relay string
|
||||||
}
|
}
|
||||||
|
|
||||||
type IncomingEvent struct {
|
type RelayEvent struct {
|
||||||
*Event
|
*Event
|
||||||
Relay *Relay
|
Relay *Relay
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ie IncomingEvent) String() string {
|
func (ie RelayEvent) String() string {
|
||||||
return fmt.Sprintf("[%s] >> %s", ie.Relay.URL, ie.Event)
|
return fmt.Sprintf("[%s] >> %s", ie.Relay.URL, ie.Event)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -70,7 +70,7 @@ func NewSimplePool(ctx context.Context, opts ...PoolOption) *SimplePool {
|
||||||
// WithAuthHandler must be a function that signs the auth event when called.
|
// WithAuthHandler must be a function that signs the auth event when called.
|
||||||
// it will be called whenever any relay in the pool returns a `CLOSED` message
|
// it will be called whenever any relay in the pool returns a `CLOSED` message
|
||||||
// with the "auth-required:" prefix, only once for each relay
|
// with the "auth-required:" prefix, only once for each relay
|
||||||
type WithAuthHandler func(authEvent *Event) error
|
type WithAuthHandler func(ctx context.Context, authEvent RelayEvent) error
|
||||||
|
|
||||||
func (h WithAuthHandler) ApplyPoolOption(pool *SimplePool) {
|
func (h WithAuthHandler) ApplyPoolOption(pool *SimplePool) {
|
||||||
pool.authHandler = h
|
pool.authHandler = h
|
||||||
|
@ -114,7 +114,7 @@ func (h withPenaltyBoxOpt) ApplyPoolOption(pool *SimplePool) {
|
||||||
|
|
||||||
// WithEventMiddleware is a function that will be called with all events received.
|
// WithEventMiddleware is a function that will be called with all events received.
|
||||||
// more than one can be passed at a time.
|
// more than one can be passed at a time.
|
||||||
type WithEventMiddleware func(IncomingEvent)
|
type WithEventMiddleware func(RelayEvent)
|
||||||
|
|
||||||
func (h WithEventMiddleware) ApplyPoolOption(pool *SimplePool) {
|
func (h WithEventMiddleware) ApplyPoolOption(pool *SimplePool) {
|
||||||
pool.eventMiddleware = append(pool.eventMiddleware, h)
|
pool.eventMiddleware = append(pool.eventMiddleware, h)
|
||||||
|
@ -173,19 +173,19 @@ func (pool *SimplePool) EnsureRelay(url string) (*Relay, error) {
|
||||||
|
|
||||||
// SubMany opens a subscription with the given filters to multiple relays
|
// SubMany opens a subscription with the given filters to multiple relays
|
||||||
// the subscriptions only end when the context is canceled
|
// the subscriptions only end when the context is canceled
|
||||||
func (pool *SimplePool) SubMany(ctx context.Context, urls []string, filters Filters) chan IncomingEvent {
|
func (pool *SimplePool) SubMany(ctx context.Context, urls []string, filters Filters) chan RelayEvent {
|
||||||
return pool.subMany(ctx, urls, filters, true)
|
return pool.subMany(ctx, urls, filters, true)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SubManyNonUnique is like SubMany, but returns duplicate events if they come from different relays
|
// SubManyNonUnique is like SubMany, but returns duplicate events if they come from different relays
|
||||||
func (pool *SimplePool) SubManyNonUnique(ctx context.Context, urls []string, filters Filters) chan IncomingEvent {
|
func (pool *SimplePool) SubManyNonUnique(ctx context.Context, urls []string, filters Filters) chan RelayEvent {
|
||||||
return pool.subMany(ctx, urls, filters, false)
|
return pool.subMany(ctx, urls, filters, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (pool *SimplePool) subMany(ctx context.Context, urls []string, filters Filters, unique bool) chan IncomingEvent {
|
func (pool *SimplePool) subMany(ctx context.Context, urls []string, filters Filters, unique bool) chan RelayEvent {
|
||||||
ctx, cancel := context.WithCancel(ctx)
|
ctx, cancel := context.WithCancel(ctx)
|
||||||
_ = cancel // do this so `go vet` will stop complaining
|
_ = cancel // do this so `go vet` will stop complaining
|
||||||
events := make(chan IncomingEvent)
|
events := make(chan RelayEvent)
|
||||||
seenAlready := xsync.NewMapOf[string, Timestamp]()
|
seenAlready := xsync.NewMapOf[string, Timestamp]()
|
||||||
ticker := time.NewTicker(seenAlreadyDropTick)
|
ticker := time.NewTicker(seenAlreadyDropTick)
|
||||||
|
|
||||||
|
@ -255,7 +255,7 @@ func (pool *SimplePool) subMany(ctx context.Context, urls []string, filters Filt
|
||||||
goto reconnect
|
goto reconnect
|
||||||
}
|
}
|
||||||
|
|
||||||
ie := IncomingEvent{Event: evt, Relay: relay}
|
ie := RelayEvent{Event: evt, Relay: relay}
|
||||||
for _, mh := range pool.eventMiddleware {
|
for _, mh := range pool.eventMiddleware {
|
||||||
mh(ie)
|
mh(ie)
|
||||||
}
|
}
|
||||||
|
@ -284,7 +284,10 @@ func (pool *SimplePool) subMany(ctx context.Context, urls []string, filters Filt
|
||||||
case reason := <-sub.ClosedReason:
|
case reason := <-sub.ClosedReason:
|
||||||
if strings.HasPrefix(reason, "auth-required:") && pool.authHandler != nil && !hasAuthed {
|
if strings.HasPrefix(reason, "auth-required:") && pool.authHandler != nil && !hasAuthed {
|
||||||
// relay is requesting auth. if we can we will perform auth and try again
|
// relay is requesting auth. if we can we will perform auth and try again
|
||||||
if err := relay.Auth(ctx, pool.authHandler); err == nil {
|
err := relay.Auth(ctx, func(event *Event) error {
|
||||||
|
return pool.authHandler(ctx, RelayEvent{Event: event, Relay: relay})
|
||||||
|
})
|
||||||
|
if err == nil {
|
||||||
hasAuthed = true // so we don't keep doing AUTH again and again
|
hasAuthed = true // so we don't keep doing AUTH again and again
|
||||||
goto subscribe
|
goto subscribe
|
||||||
}
|
}
|
||||||
|
@ -310,19 +313,19 @@ func (pool *SimplePool) subMany(ctx context.Context, urls []string, filters Filt
|
||||||
}
|
}
|
||||||
|
|
||||||
// SubManyEose is like SubMany, but it stops subscriptions and closes the channel when gets a EOSE
|
// SubManyEose is like SubMany, but it stops subscriptions and closes the channel when gets a EOSE
|
||||||
func (pool *SimplePool) SubManyEose(ctx context.Context, urls []string, filters Filters) chan IncomingEvent {
|
func (pool *SimplePool) SubManyEose(ctx context.Context, urls []string, filters Filters) chan RelayEvent {
|
||||||
return pool.subManyEose(ctx, urls, filters, true)
|
return pool.subManyEose(ctx, urls, filters, true)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SubManyEoseNonUnique is like SubManyEose, but returns duplicate events if they come from different relays
|
// SubManyEoseNonUnique is like SubManyEose, but returns duplicate events if they come from different relays
|
||||||
func (pool *SimplePool) SubManyEoseNonUnique(ctx context.Context, urls []string, filters Filters) chan IncomingEvent {
|
func (pool *SimplePool) SubManyEoseNonUnique(ctx context.Context, urls []string, filters Filters) chan RelayEvent {
|
||||||
return pool.subManyEose(ctx, urls, filters, false)
|
return pool.subManyEose(ctx, urls, filters, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (pool *SimplePool) subManyEose(ctx context.Context, urls []string, filters Filters, unique bool) chan IncomingEvent {
|
func (pool *SimplePool) subManyEose(ctx context.Context, urls []string, filters Filters, unique bool) chan RelayEvent {
|
||||||
ctx, cancel := context.WithCancel(ctx)
|
ctx, cancel := context.WithCancel(ctx)
|
||||||
|
|
||||||
events := make(chan IncomingEvent)
|
events := make(chan RelayEvent)
|
||||||
seenAlready := xsync.NewMapOf[string, bool]()
|
seenAlready := xsync.NewMapOf[string, bool]()
|
||||||
wg := sync.WaitGroup{}
|
wg := sync.WaitGroup{}
|
||||||
wg.Add(len(urls))
|
wg.Add(len(urls))
|
||||||
|
@ -361,7 +364,9 @@ func (pool *SimplePool) subManyEose(ctx context.Context, urls []string, filters
|
||||||
case reason := <-sub.ClosedReason:
|
case reason := <-sub.ClosedReason:
|
||||||
if strings.HasPrefix(reason, "auth-required:") && pool.authHandler != nil && !hasAuthed {
|
if strings.HasPrefix(reason, "auth-required:") && pool.authHandler != nil && !hasAuthed {
|
||||||
// relay is requesting auth. if we can we will perform auth and try again
|
// relay is requesting auth. if we can we will perform auth and try again
|
||||||
err := relay.Auth(ctx, pool.authHandler)
|
err := relay.Auth(ctx, func(event *Event) error {
|
||||||
|
return pool.authHandler(ctx, RelayEvent{Event: event, Relay: relay})
|
||||||
|
})
|
||||||
if err == nil {
|
if err == nil {
|
||||||
hasAuthed = true // so we don't keep doing AUTH again and again
|
hasAuthed = true // so we don't keep doing AUTH again and again
|
||||||
goto subscribe
|
goto subscribe
|
||||||
|
@ -374,7 +379,7 @@ func (pool *SimplePool) subManyEose(ctx context.Context, urls []string, filters
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
ie := IncomingEvent{Event: evt, Relay: relay}
|
ie := RelayEvent{Event: evt, Relay: relay}
|
||||||
for _, mh := range pool.eventMiddleware {
|
for _, mh := range pool.eventMiddleware {
|
||||||
mh(ie)
|
mh(ie)
|
||||||
}
|
}
|
||||||
|
@ -399,7 +404,7 @@ func (pool *SimplePool) subManyEose(ctx context.Context, urls []string, filters
|
||||||
}
|
}
|
||||||
|
|
||||||
// QuerySingle returns the first event returned by the first relay, cancels everything else.
|
// QuerySingle returns the first event returned by the first relay, cancels everything else.
|
||||||
func (pool *SimplePool) QuerySingle(ctx context.Context, urls []string, filter Filter) *IncomingEvent {
|
func (pool *SimplePool) QuerySingle(ctx context.Context, urls []string, filter Filter) *RelayEvent {
|
||||||
ctx, cancel := context.WithCancel(ctx)
|
ctx, cancel := context.WithCancel(ctx)
|
||||||
defer cancel()
|
defer cancel()
|
||||||
for ievt := range pool.SubManyEose(ctx, urls, Filters{filter}) {
|
for ievt := range pool.SubManyEose(ctx, urls, Filters{filter}) {
|
||||||
|
@ -411,9 +416,9 @@ func (pool *SimplePool) QuerySingle(ctx context.Context, urls []string, filter F
|
||||||
func (pool *SimplePool) batchedSubMany(
|
func (pool *SimplePool) batchedSubMany(
|
||||||
ctx context.Context,
|
ctx context.Context,
|
||||||
dfs []DirectedFilters,
|
dfs []DirectedFilters,
|
||||||
subFn func(context.Context, []string, Filters, bool) chan IncomingEvent,
|
subFn func(context.Context, []string, Filters, bool) chan RelayEvent,
|
||||||
) chan IncomingEvent {
|
) chan RelayEvent {
|
||||||
res := make(chan IncomingEvent)
|
res := make(chan RelayEvent)
|
||||||
|
|
||||||
for _, df := range dfs {
|
for _, df := range dfs {
|
||||||
go func(df DirectedFilters) {
|
go func(df DirectedFilters) {
|
||||||
|
@ -427,11 +432,11 @@ func (pool *SimplePool) batchedSubMany(
|
||||||
}
|
}
|
||||||
|
|
||||||
// BatchedSubMany fires subscriptions only to specific relays, but batches them when they are the same.
|
// BatchedSubMany fires subscriptions only to specific relays, but batches them when they are the same.
|
||||||
func (pool *SimplePool) BatchedSubMany(ctx context.Context, dfs []DirectedFilters) chan IncomingEvent {
|
func (pool *SimplePool) BatchedSubMany(ctx context.Context, dfs []DirectedFilters) chan RelayEvent {
|
||||||
return pool.batchedSubMany(ctx, dfs, pool.subMany)
|
return pool.batchedSubMany(ctx, dfs, pool.subMany)
|
||||||
}
|
}
|
||||||
|
|
||||||
// BatchedSubManyEose is like BatchedSubMany, but ends upon receiving EOSE from all relays.
|
// BatchedSubManyEose is like BatchedSubMany, but ends upon receiving EOSE from all relays.
|
||||||
func (pool *SimplePool) BatchedSubManyEose(ctx context.Context, dfs []DirectedFilters) chan IncomingEvent {
|
func (pool *SimplePool) BatchedSubManyEose(ctx context.Context, dfs []DirectedFilters) chan RelayEvent {
|
||||||
return pool.batchedSubMany(ctx, dfs, pool.subManyEose)
|
return pool.batchedSubMany(ctx, dfs, pool.subManyEose)
|
||||||
}
|
}
|
||||||
|
|
7
vendor/github.com/nbd-wtf/go-nostr/relay.go
generated
vendored
7
vendor/github.com/nbd-wtf/go-nostr/relay.go
generated
vendored
|
@ -160,6 +160,13 @@ func (r *Relay) ConnectWithTLS(ctx context.Context, tlsConfig *tls.Config) error
|
||||||
defer cancel()
|
defer cancel()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if r.RequestHeader == nil {
|
||||||
|
r.RequestHeader = make(http.Header, 1)
|
||||||
|
}
|
||||||
|
if r.RequestHeader.Get("User-Agent") == "" {
|
||||||
|
r.RequestHeader.Set("User-Agent", "github.com/nbd-wtf/go-nostr")
|
||||||
|
}
|
||||||
|
|
||||||
conn, err := NewConnection(ctx, r.URL, r.RequestHeader, tlsConfig)
|
conn, err := NewConnection(ctx, r.URL, r.RequestHeader, tlsConfig)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("error opening websocket to '%s': %w", r.URL, err)
|
return fmt.Errorf("error opening websocket to '%s': %w", r.URL, err)
|
||||||
|
|
8
vendor/modules.txt
vendored
8
vendor/modules.txt
vendored
|
@ -22,7 +22,7 @@ github.com/decred/dcrd/dcrec/secp256k1/v4/schnorr
|
||||||
# github.com/fasthttp/websocket v1.5.7
|
# github.com/fasthttp/websocket v1.5.7
|
||||||
## explicit; go 1.18
|
## explicit; go 1.18
|
||||||
github.com/fasthttp/websocket
|
github.com/fasthttp/websocket
|
||||||
# github.com/fiatjaf/eventstore v0.9.0
|
# github.com/fiatjaf/eventstore v0.9.1
|
||||||
## explicit; go 1.23.0
|
## explicit; go 1.23.0
|
||||||
github.com/fiatjaf/eventstore
|
github.com/fiatjaf/eventstore
|
||||||
github.com/fiatjaf/eventstore/postgresql
|
github.com/fiatjaf/eventstore/postgresql
|
||||||
|
@ -70,10 +70,10 @@ github.com/mailru/easyjson/jwriter
|
||||||
# github.com/mattn/go-colorable v0.1.13
|
# github.com/mattn/go-colorable v0.1.13
|
||||||
## explicit; go 1.15
|
## explicit; go 1.15
|
||||||
github.com/mattn/go-colorable
|
github.com/mattn/go-colorable
|
||||||
# github.com/mattn/go-isatty v0.0.19
|
# github.com/mattn/go-isatty v0.0.20
|
||||||
## explicit; go 1.15
|
## explicit; go 1.15
|
||||||
github.com/mattn/go-isatty
|
github.com/mattn/go-isatty
|
||||||
# github.com/nbd-wtf/go-nostr v0.36.1
|
# github.com/nbd-wtf/go-nostr v0.37.2
|
||||||
## explicit; go 1.23.0
|
## explicit; go 1.23.0
|
||||||
github.com/nbd-wtf/go-nostr
|
github.com/nbd-wtf/go-nostr
|
||||||
github.com/nbd-wtf/go-nostr/nip11
|
github.com/nbd-wtf/go-nostr/nip11
|
||||||
|
@ -113,7 +113,7 @@ github.com/valyala/fasthttp/stackless
|
||||||
# golang.org/x/exp v0.0.0-20240909161429-701f63a606c0
|
# golang.org/x/exp v0.0.0-20240909161429-701f63a606c0
|
||||||
## explicit; go 1.22.0
|
## explicit; go 1.22.0
|
||||||
golang.org/x/exp/constraints
|
golang.org/x/exp/constraints
|
||||||
# golang.org/x/net v0.18.0
|
# golang.org/x/net v0.21.0
|
||||||
## explicit; go 1.18
|
## explicit; go 1.18
|
||||||
golang.org/x/net/internal/socks
|
golang.org/x/net/internal/socks
|
||||||
golang.org/x/net/proxy
|
golang.org/x/net/proxy
|
||||||
|
|
Loading…
Reference in a new issue