diff options
Diffstat (limited to 'main.go')
-rw-r--r-- | main.go | 57 |
1 files changed, 57 insertions, 0 deletions
@@ -0,0 +1,57 @@ +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...") +}
\ No newline at end of file |