summaryrefslogblamecommitdiff
path: root/main.go
blob: 7113036d68e5d20ae1a83939f58c461cf5897cde (plain) (tree)
























































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