2023-08-10 14:32:11 -03:00
|
|
|
package khatru
|
2022-01-11 16:00:19 -03:00
|
|
|
|
|
|
|
import (
|
2023-11-29 12:26:04 -03:00
|
|
|
"net/http"
|
2022-01-11 16:00:19 -03:00
|
|
|
"sync"
|
|
|
|
|
2023-06-23 07:10:03 -03:00
|
|
|
"github.com/fasthttp/websocket"
|
2024-10-13 12:42:36 -03:00
|
|
|
"github.com/nbd-wtf/go-nostr"
|
2022-01-11 16:00:19 -03:00
|
|
|
)
|
|
|
|
|
|
|
|
type WebSocket struct {
|
|
|
|
conn *websocket.Conn
|
|
|
|
mutex sync.Mutex
|
2023-01-15 22:38:24 -03:00
|
|
|
|
2023-11-29 12:26:04 -03:00
|
|
|
// original request
|
|
|
|
Request *http.Request
|
|
|
|
|
2023-01-15 22:38:24 -03:00
|
|
|
// nip42
|
2023-11-29 12:23:21 -03:00
|
|
|
Challenge string
|
|
|
|
AuthedPublicKey string
|
|
|
|
Authed chan struct{}
|
2023-12-27 12:30:23 -03:00
|
|
|
|
|
|
|
authLock sync.Mutex
|
2022-01-11 16:00:19 -03:00
|
|
|
}
|
|
|
|
|
2023-08-10 14:32:11 -03:00
|
|
|
func (ws *WebSocket) WriteJSON(any any) error {
|
2022-01-11 16:00:19 -03:00
|
|
|
ws.mutex.Lock()
|
|
|
|
defer ws.mutex.Unlock()
|
|
|
|
return ws.conn.WriteJSON(any)
|
|
|
|
}
|
|
|
|
|
|
|
|
func (ws *WebSocket) WriteMessage(t int, b []byte) error {
|
|
|
|
ws.mutex.Lock()
|
|
|
|
defer ws.mutex.Unlock()
|
|
|
|
return ws.conn.WriteMessage(t, b)
|
|
|
|
}
|
2024-10-13 12:42:36 -03:00
|
|
|
|
|
|
|
func (ws *WebSocket) SendEvent(subscriptionId string, event nostr.Event) error {
|
|
|
|
return ws.WriteJSON(nostr.EventEnvelope{
|
|
|
|
SubscriptionID: &subscriptionId,
|
|
|
|
Event: event,
|
|
|
|
})
|
|
|
|
}
|