mirror of
https://git.robbyzambito.me/bluesky-nats-proxy/
synced 2025-12-21 00:34:50 +00:00
57 lines
1.3 KiB
Go
57 lines
1.3 KiB
Go
package main
|
|
|
|
import (
|
|
"encoding/json"
|
|
"log"
|
|
"os"
|
|
"os/signal"
|
|
|
|
"github.com/gorilla/websocket"
|
|
"github.com/nats-io/nats.go"
|
|
)
|
|
|
|
func main() {
|
|
// Connect to NATS
|
|
nc, err := nats.Connect(nats.DefaultURL)
|
|
if err != nil {
|
|
log.Fatal("Error connecting to NATS:", err)
|
|
}
|
|
defer nc.Close()
|
|
|
|
// Connect to WebSocket
|
|
c, _, err := websocket.DefaultDialer.Dial("wss://jetstream2.us-east.bsky.network/subscribe?wantedCollections=app.bsky.feed.post", nil)
|
|
if err != nil {
|
|
log.Fatal("Error connecting to WebSocket:", err)
|
|
}
|
|
defer c.Close()
|
|
|
|
// Handle WebSocket messages
|
|
go func() {
|
|
for {
|
|
_, message, err := c.ReadMessage()
|
|
if err != nil {
|
|
log.Println("Error reading WebSocket message:", err)
|
|
return
|
|
}
|
|
|
|
// Verify that the message is valid JSON
|
|
var jsonMsg json.RawMessage
|
|
if err := json.Unmarshal(message, &jsonMsg); err != nil {
|
|
log.Println("Received non-JSON message, skipping")
|
|
continue
|
|
}
|
|
|
|
// Publish the JSON message to NATS
|
|
if err := nc.Publish("bsky.feed.post", message); err != nil {
|
|
log.Println("Error publishing to NATS:", err)
|
|
}
|
|
}
|
|
}()
|
|
|
|
// Wait for interrupt signal to gracefully shut down
|
|
interrupt := make(chan os.Signal, 1)
|
|
signal.Notify(interrupt, os.Interrupt)
|
|
<-interrupt
|
|
|
|
log.Println("Shutting down...")
|
|
} |