socketapi

package
v1.19.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 24, 2025 License: Unlicense Imports: 47 Imported by: 0

Documentation

Index

Constants

View Source
const (
	DefaultChallengeHRP    = "nchal"
	DefaultChallengeLength = 16
)
View Source
const (
	DefaultWriteWait      = 10 * time.Second
	DefaultPongWait       = 60 * time.Second
	DefaultPingWait       = DefaultPongWait / 2
	DefaultMaxMessageSize = 1 * units.Mb
)
View Source
const Type = "socketapi"

Variables

View Source
var (
	NIP20prefixmatcher = regexp.MustCompile(`^\w+: `)
)
View Source
var Ok = OKs{
	AuthRequired: func(a *A, env eid.Ider, format string, params ...any) (err error) {
		return okenvelope.NewFrom(env.Id(), false, reason.AuthRequired.F(format, params...)).Write(a.Listener)
	},
	PoW: func(a *A, env eid.Ider, format string, params ...any) (err error) {
		return okenvelope.NewFrom(env.Id(), false, reason.PoW.F(format, params...)).Write(a.Listener)
	},
	Duplicate: func(a *A, env eid.Ider, format string, params ...any) (err error) {
		return okenvelope.NewFrom(env.Id(), false, reason.Duplicate.F(format, params...)).Write(a.Listener)
	},
	Blocked: func(a *A, env eid.Ider, format string, params ...any) (err error) {
		return okenvelope.NewFrom(env.Id(), false, reason.Blocked.F(format, params...)).Write(a.Listener)
	},
	RateLimited: func(a *A, env eid.Ider, format string, params ...any) (err error) {
		return okenvelope.NewFrom(env.Id(), false, reason.RateLimited.F(format, params...)).Write(a.Listener)
	},
	Invalid: func(a *A, env eid.Ider, format string, params ...any) (err error) {
		return okenvelope.NewFrom(env.Id(), false, reason.Invalid.F(format, params...)).Write(a.Listener)
	},
	Error: func(a *A, env eid.Ider, format string, params ...any) (err error) {
		return okenvelope.NewFrom(env.Id(), false, reason.Error.F(format, params...)).Write(a.Listener)
	},
	Unsupported: func(a *A, env eid.Ider, format string, params ...any) (err error) {
		return okenvelope.NewFrom(env.Id(), false, reason.Unsupported.F(format, params...)).Write(a.Listener)
	},
	Restricted: func(a *A, env eid.Ider, format string, params ...any) (err error) {
		return okenvelope.NewFrom(env.Id(), false, reason.Restricted.F(format, params...)).Write(a.Listener)
	},
}
View Source
var Upgrader = websocket.Upgrader{ReadBufferSize: 1024, WriteBufferSize: 1024,
	CheckOrigin: func(r *http.Request) bool {
		return true
	}}

Functions

func GetListener

func GetListener(conn *websocket.Conn, req *http.Request) (w *ws.Listener)

GetListener generates a new ws.Listener with a new challenge for a subscriber.

func New

func New(s interfaces.Server, path string, sm *servemux.S)

Types

type A

type A struct {
	Ctx          context.T
	Listener     *ws.Listener
	AwaitingAuth *event.T
	interfaces.Server
}

func (*A) AuthRequiredResponse

func (a *A) AuthRequiredResponse(env *reqenvelope.T, remote string, aut []byte, r reason.R) (notice []byte, err error)

func (*A) CheckDelete

func (a *A) CheckDelete(c context.T, env *eventenvelope.Submission, sto store.I) (err error)

func (*A) CheckPrivilege

func (a *A) CheckPrivilege(events event.Ts, f *filter.T, env *reqenvelope.T,
	srv interfaces.Server, aut []byte, remote string) (evs event.Ts, notice []byte, err error)

func (*A) FilterPrivileged

func (a *A) FilterPrivileged(c context.T, sto store.I, aut []byte, events event.Ts) (evs event.Ts)

func (*A) HandleAuth

func (a *A) HandleAuth(b []byte, srv interfaces.Server) (msg []byte)

func (*A) HandleAuthPrivilege

func (a *A) HandleAuthPrivilege(env *reqenvelope.T, f *filter.T, aut []byte, remote string) (notice []byte, err error)

func (*A) HandleClose

func (a *A) HandleClose(req []byte,
	srv interfaces.Server) (note []byte)

func (*A) HandleEvent

func (a *A) HandleEvent(c context.T, req []byte, srv interfaces.Server,
	remote string) (msg []byte)

func (*A) HandleMessage

func (a *A) HandleMessage(msg []byte, remote string)

func (*A) HandleRejectEvent

func (a *A) HandleRejectEvent(env *eventenvelope.Submission, notice string) (err error)

func (*A) HandleReq

func (a *A) HandleReq(c context.T, req []byte, srv interfaces.Server, aut []byte, remote string) (r []byte)

func (*A) Pinger

func (a *A) Pinger(ctx context.T, ticker *time.Ticker, cancel context.F, remote string)

func (*A) ProcessDelete

func (a *A) ProcessDelete(c context.T, target *event.T, env *eventenvelope.Submission,
	sto store.I) (skip bool, err error)

func (*A) ServeHTTP

func (a *A) ServeHTTP(w http.ResponseWriter, r *http.Request)

func (*A) VerifyEvent

func (a *A) VerifyEvent(env *eventenvelope.Submission) (err error)

func (*A) WriteEvents

func (a *A) WriteEvents(events event.Ts, env *reqenvelope.T, i int) (err error)

type Close

type Close struct {
	*ws.Listener
	Id string
}

type Map

type Map map[*ws.Listener]map[string]*filters.T

Map is a map of filters associated with a collection of ws.Listener connections.

type OK

type OK func(a *A, env eid.Ider, format string, params ...any) (err error)

type OKs

type OKs struct {
	AuthRequired OK
	PoW          OK
	Duplicate    OK
	Blocked      OK
	RateLimited  OK
	Invalid      OK
	Error        OK
	Unsupported  OK
	Restricted   OK
}

type S

type S struct {
	// Mx is the mutex for the Map.
	Mx sync.Mutex
	// Map is the map of subscribers and subscriptions from the websocket api.
	Map
}

func NewPublisher

func NewPublisher() *S

func (*S) Deliver

func (p *S) Deliver(authRequired, publicReadable bool, ev *event.T)

func (*S) Receive

func (p *S) Receive(msg typer.T)

func (*S) Type

func (p *S) Type() string

type W

type W struct {
	*ws.Listener
	// If Cancel is true, this is a close command.
	Cancel bool
	// Id is the subscription Id. If Cancel is true, cancel the named subscription, otherwise,
	// cancel the publisher for the socket.
	Id       string
	Receiver event.C
	Filters  *filters.T
}

func (*W) Type

func (w *W) Type() string

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL