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