Files
bluesky-nats-proxy/main.go
Robby Zambito 9781690db7 Initial commit
Dumb proxy all posts to bsky.feed.post
2024-11-17 18:39:28 -05:00

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...")
}