For those who call Bluesky "BlueSky"

use atcute for jetstream

Changed files
+59 -25
+11 -1
bun.lock
··· 4 4 "": { 5 5 "name": "bluesky", 6 6 "dependencies": { 7 + "@atcute/bluesky": "^3.2.2", 8 + "@atcute/jetstream": "^1.1.0", 9 + "@atcute/lexicons": "^1.1.1", 7 10 "@skyware/bot": "^0.4.0", 8 - "@skyware/jetstream": "^0.2.5", 9 11 "@skyware/labeler": "^0.2.0", 10 12 }, 11 13 "devDependencies": { ··· 32 34 "@atcute/client": ["@atcute/client@4.0.3", "", { "dependencies": { "@atcute/identity": "^1.0.2", "@atcute/lexicons": "^1.0.3" } }, "sha512-RIOZWFVLca/HiPAAUDqQPOdOreCxTbL5cb+WUf5yqQOKIu5yEAP3eksinmlLmgIrlr5qVOE7brazUUzaskFCfw=="], 33 35 34 36 "@atcute/identity": ["@atcute/identity@1.1.0", "", { "dependencies": { "@atcute/lexicons": "^1.1.1", "@badrap/valita": "^0.4.5" } }, "sha512-6vRvRqJatDB+JUQsb+UswYmtBGQnSZcqC3a2y6H5DB/v5KcIh+6nFFtc17G0+3W9rxdk7k9M4KkgkdKf/YDNoQ=="], 37 + 38 + "@atcute/jetstream": ["@atcute/jetstream@1.1.0", "", { "dependencies": { "@atcute/lexicons": "^1.1.1", "@badrap/valita": "^0.4.6", "@mary-ext/event-iterator": "^1.0.0", "@mary-ext/simple-event-emitter": "^1.0.0", "partysocket": "^1.1.5", "type-fest": "^4.41.0", "yocto-queue": "^1.2.1" } }, "sha512-XrSeEHLt2FnVNm3KBDQYY7+rWM0IQKBjLQUjdoCj4mnkMCdm3/dC09qs5ubQQGrHieUWeKHHEko/D6EB891hPg=="], 35 39 36 40 "@atcute/lexicons": ["@atcute/lexicons@1.1.1", "", { "dependencies": { "esm-env": "^1.2.2" } }, "sha512-k6qy5p3j9fJJ6ekaMPfEfp3ni4TW/XNuH9ZmsuwC0fi0tOjp+Fa8ZQakHwnqOzFt/cVBfGcmYE/lKNAbeTjgUg=="], 37 41 ··· 78 82 "@libsql/linux-x64-musl": ["@libsql/linux-x64-musl@0.4.7", "", { "os": "linux", "cpu": "x64" }, "sha512-nI6tpS1t6WzGAt1Kx1n1HsvtBbZ+jHn0m7ogNNT6pQHZQj7AFFTIMeDQw/i/Nt5H38np1GVRNsFe99eSIMs9XA=="], 79 83 80 84 "@libsql/win32-x64-msvc": ["@libsql/win32-x64-msvc@0.4.7", "", { "os": "win32", "cpu": "x64" }, "sha512-7pJzOWzPm6oJUxml+PCDRzYQ4A1hTMHAciTAHfFK4fkbDZX33nWPVG7Y3vqdKtslcwAzwmrNDc6sXy2nwWnbiw=="], 85 + 86 + "@mary-ext/event-iterator": ["@mary-ext/event-iterator@1.0.0", "", { "dependencies": { "yocto-queue": "^1.2.1" } }, "sha512-l6gCPsWJ8aRCe/s7/oCmero70kDHgIK5m4uJvYgwEYTqVxoBOIXbKr5tnkLqUHEg6mNduB4IWvms3h70Hp9ADQ=="], 87 + 88 + "@mary-ext/simple-event-emitter": ["@mary-ext/simple-event-emitter@1.0.0", "", {}, "sha512-meA/zJZKIN1RVBNEYIbjufkUrW7/tRjHH60FjolpG1ixJKo76TB208qefQLNdOVDA7uIG0CGEDuhmMirtHKLAg=="], 81 89 82 90 "@neon-rs/load": ["@neon-rs/load@0.0.4", "", {}, "sha512-kTPhdZyTQxB+2wpiRcFWrDcejc4JI6tkPuS7UZCG4l6Zvc5kU/gGQ/ozvHTh1XR5tS+UlfAfGuPajjzQjCiHCw=="], 83 91 ··· 246 254 "tiny-emitter": ["tiny-emitter@2.1.0", "", {}, "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q=="], 247 255 248 256 "toad-cache": ["toad-cache@3.7.0", "", {}, "sha512-/m8M+2BJUpoJdgAHoG+baCwBT+tf2VraSfkBgl0Y00qIWt41DJ8R5B8nsEw0I58YwF5IZH6z24/2TobDKnqSWw=="], 257 + 258 + "type-fest": ["type-fest@4.41.0", "", {}, "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA=="], 249 259 250 260 "typescript": ["typescript@5.9.2", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A=="], 251 261
+45 -23
index.ts
··· 1 + import { AppBskyFeedPost } from "@atcute/bluesky"; 2 + import { JetstreamSubscription } from "@atcute/jetstream"; 3 + import { is } from "@atcute/lexicons"; 1 4 import { LabelerServer } from "@skyware/labeler"; 2 - import { Jetstream } from "@skyware/jetstream"; 3 5 4 6 const server = new LabelerServer({ 5 - did: process.env.LABELER_DID, 6 - signingKey: process.env.SIGNING_KEY 7 + did: process.env.LABELER_DID, 8 + signingKey: process.env.SIGNING_KEY, 7 9 }); 8 10 9 11 server.start(14831, (error) => { 10 - if (error) { 11 - console.error("Failed to start server:", error); 12 - } else { 13 - console.log("Labeler server running on port 14831"); 14 - } 12 + if (error) { 13 + console.error("Failed to start server:", error); 14 + } else { 15 + console.log("Labeler server running on port 14831"); 16 + } 15 17 }); 16 18 17 - const jetstream = new Jetstream(); 18 - jetstream.start(); 19 - 20 - jetstream.onCreate("app.bsky.feed.post", async (event) => { 21 - try { 22 - if (event.commit.record.text.includes("BlueSky")) { 23 - console.log("Labeling: ", JSON.stringify(event.commit)) 24 - await server.createLabel({ 25 - uri: event.did, 26 - val: "blue-sky", 27 - }); 28 - } 29 - } catch (e) { 30 - console.error(`Error occured on record ${event.commit.cid}: `, (e as Error).toString()) 31 - } 19 + const subscription = new JetstreamSubscription({ 20 + url: "wss://jetstream2.us-east.bsky.network", 21 + wantedCollections: ["app.bsky.feed.post"], 32 22 }); 23 + 24 + for await (const event of subscription) { 25 + if (event.kind === "commit") { 26 + const commit = event.commit; 27 + 28 + if (commit.collection !== "app.bsky.feed.post") { 29 + continue; 30 + } 31 + 32 + if (commit.operation === "create") { 33 + const record = commit.record; 34 + if (!is(AppBskyFeedPost.mainSchema, record)) { 35 + continue; 36 + } 37 + 38 + try { 39 + if (record.text.includes("BlueSky")) { 40 + console.log("Labeling: ", JSON.stringify(event.commit)); 41 + await server.createLabel({ 42 + uri: event.did, 43 + val: "blue-sky", 44 + }); 45 + } 46 + } catch (e) { 47 + console.error( 48 + `Error occured on record ${commit.cid}: `, 49 + (e as Error).toString(), 50 + ); 51 + } 52 + } 53 + } 54 + }
+3 -1
package.json
··· 13 13 "typescript": "^5" 14 14 }, 15 15 "dependencies": { 16 + "@atcute/bluesky": "^3.2.2", 17 + "@atcute/jetstream": "^1.1.0", 18 + "@atcute/lexicons": "^1.1.1", 16 19 "@skyware/bot": "^0.4.0", 17 - "@skyware/jetstream": "^0.2.5", 18 20 "@skyware/labeler": "^0.2.0" 19 21 } 20 22 }