summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobby Zambito <contact@robbyzambito.me>2024-11-17 18:36:23 -0500
committerRobby Zambito <contact@robbyzambito.me>2024-11-17 18:39:28 -0500
commit9781690db73f6d2f2090381dfe44d9b364741d0d (patch)
treed7daa755b7b0affa7f6468498a8b9346cc85f5eb
Initial commit
Dumb proxy all posts to bsky.feed.post
-rw-r--r--.gitignore1
-rw-r--r--go.mod13
-rw-r--r--go.sum14
-rw-r--r--main.go57
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
diff --git a/go.mod b/go.mod
new file mode 100644
index 0000000..358195f
--- /dev/null
+++ b/go.mod
@@ -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
+)
diff --git a/go.sum b/go.sum
new file mode 100644
index 0000000..5808e70
--- /dev/null
+++ b/go.sum
@@ -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=
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