+11
-1
bun.lock
+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
+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
+3
-1
package.json