summaryrefslogtreecommitdiff
path: root/main.go
diff options
context:
space:
mode:
Diffstat (limited to 'main.go')
-rw-r--r--main.go57
1 files changed, 57 insertions, 0 deletions
diff --git a/main.go b/main.go
new file mode 100644
index 0000000..7113036
--- /dev/null
+++ b/main.go
@@ -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