diff options
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | go.mod | 13 | ||||
-rw-r--r-- | go.sum | 14 | ||||
-rw-r--r-- | main.go | 57 |
4 files changed, 85 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e4e5f6c --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +*~
\ No newline at end of file @@ -0,0 +1,13 @@ +module git.robbyzambito.me/bluesky-nats-proxy/v2 + +go 1.23.2 + +require ( + github.com/gorilla/websocket v1.5.3 // indirect + github.com/klauspost/compress v1.17.2 // indirect + github.com/nats-io/nats.go v1.37.0 // indirect + github.com/nats-io/nkeys v0.4.7 // indirect + github.com/nats-io/nuid v1.0.1 // indirect + golang.org/x/crypto v0.18.0 // indirect + golang.org/x/sys v0.16.0 // indirect +) @@ -0,0 +1,14 @@ +github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg= +github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/klauspost/compress v1.17.2 h1:RlWWUY/Dr4fL8qk9YG7DTZ7PDgME2V4csBXA8L/ixi4= +github.com/klauspost/compress v1.17.2/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= +github.com/nats-io/nats.go v1.37.0 h1:07rauXbVnnJvv1gfIyghFEo6lUcYRY0WXc3x7x0vUxE= +github.com/nats-io/nats.go v1.37.0/go.mod h1:Ubdu4Nh9exXdSz0RVWRFBbRfrbSxOYd26oF0wkWclB8= +github.com/nats-io/nkeys v0.4.7 h1:RwNJbbIdYCoClSDNY7QVKZlyb/wfT6ugvFCiKy6vDvI= +github.com/nats-io/nkeys v0.4.7/go.mod h1:kqXRgRDPlGy7nGaEDMuYzmiJCIAAWDK0IMBtDmGD0nc= +github.com/nats-io/nuid v1.0.1 h1:5iA8DT8V7q8WK2EScv2padNa/rTESc1KdnPw4TC2paw= +github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= +golang.org/x/crypto v0.18.0 h1:PGVlW0xEltQnzFZ55hkuX5+KLyrMYhHld1YHO4AKcdc= +golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg= +golang.org/x/sys v0.16.0 h1:xWw16ngr6ZMtmxDyKyIgsE93KNKz5HKmMa3b8ALHidU= +golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= @@ -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 |