Pronouns labels on Bluesky

refactor

-1
package-lock.json
···
"dotenv": "^16.4.5"
},
"devDependencies": {
-
"@atcute/bluesky": "^1.0.6",
"@types/node": "^22.7.5",
"typescript": "^5.5.3"
}
···
"dotenv": "^16.4.5"
},
"devDependencies": {
"@types/node": "^22.7.5",
"typescript": "^5.5.3"
}
-1
package.json
···
"start": "npx tsx src/main.ts"
},
"devDependencies": {
-
"@atcute/bluesky": "^1.0.6",
"@types/node": "^22.7.5",
"typescript": "^5.5.3"
},
···
"start": "npx tsx src/main.ts"
},
"devDependencies": {
"@types/node": "^22.7.5",
"typescript": "^5.5.3"
},
+2 -2
src/constants.ts
···
import "dotenv/config";
export const DID = process.env.DID ?? "";
-
export const SIGNING_KEY = process.env.SIGNING_KEY ?? "";
export const PORT = Number(process.env.PORT ?? 4001);
export const URL = process.env.URL ?? "wss://jetstream.atproto.tools/subscribe";
-
export const LABEL_LIMIT = 4;
export const DELETE = "3kwsqucto3j2a";
export const POSTS: Record<string, string> = {
"3kwss4ldkwd2j": "they",
···
import "dotenv/config";
export const DID = process.env.DID ?? "";
+
export const SIGN_KEY = process.env.SIGNING_KEY ?? "";
export const PORT = Number(process.env.PORT ?? 4001);
export const URL = process.env.URL ?? "wss://jetstream.atproto.tools/subscribe";
+
export const MAXLABELS = 4;
export const DELETE = "3kwsqucto3j2a";
export const POSTS: Record<string, string> = {
"3kwss4ldkwd2j": "they",
+3 -11
src/label.ts
···
import { ComAtprotoLabelDefs } from "@atcute/client/lexicons";
-
import {
-
DID,
-
PORT,
-
LABEL_LIMIT,
-
POSTS,
-
SIGNING_KEY,
-
DELETE,
-
} from "./constants.js";
import { LabelerServer } from "@skyware/labeler";
-
const server = new LabelerServer({ did: DID, signingKey: SIGNING_KEY });
-
server.start(PORT, (error, address) => {
if (error) console.error(error);
else console.log(`Labeler server listening on ${address}`);
···
if (rkey.includes(DELETE)) {
server.createLabels({ uri: did }, { negate: [...labels] });
console.log(`${new Date().toISOString()} Deleted labels: ${did}`);
-
} else if (labels.size < LABEL_LIMIT && POSTS[rkey]) {
server.createLabel({ uri: did, val: POSTS[rkey] });
console.log(`${new Date().toISOString()} Labeled ${did}: ${POSTS[rkey]}`);
}
···
import { ComAtprotoLabelDefs } from "@atcute/client/lexicons";
+
import { DID, PORT, MAXLABELS, POSTS, SIGN_KEY, DELETE } from "./constants.js";
import { LabelerServer } from "@skyware/labeler";
+
const server = new LabelerServer({ did: DID, signingKey: SIGN_KEY });
server.start(PORT, (error, address) => {
if (error) console.error(error);
else console.log(`Labeler server listening on ${address}`);
···
if (rkey.includes(DELETE)) {
server.createLabels({ uri: did }, { negate: [...labels] });
console.log(`${new Date().toISOString()} Deleted labels: ${did}`);
+
} else if (labels.size < MAXLABELS && POSTS[rkey]) {
server.createLabel({ uri: did, val: POSTS[rkey] });
console.log(`${new Date().toISOString()} Labeled ${did}: ${POSTS[rkey]}`);
}
+7 -11
src/main.ts
···
import { DID, URL } from "./constants.js";
import fs from "node:fs";
import { Jetstream } from "@skyware/jetstream";
-
import { AppBskyFeedLike } from "@atcute/client/lexicons";
let intervalID: NodeJS.Timeout;
const cursorFile = fs.readFileSync("cursor.txt", "utf8");
-
if (cursorFile) console.log(`Initiate firehose at cursor ${cursorFile}`);
const jetstream = new Jetstream({
endpoint: URL,
···
jetstream.on("open", () => {
intervalID = setInterval(() => {
-
if (jetstream.cursor) {
-
fs.writeFile("cursor.txt", jetstream.cursor.toString(), (err) => {
-
if (err) console.log(err);
-
});
-
}
}, 60000);
});
jetstream.on("error", (err) => console.error(err));
-
jetstream.on("close", () => clearInterval(intervalID));
jetstream.onCreate("app.bsky.feed.like", (event) => {
-
const record = event.commit.record as AppBskyFeedLike.Record;
-
if (record.subject?.uri?.includes(`${DID}/app.bsky.feed.post`))
-
label(event.did, record.subject.uri.split("/").pop()!);
});
jetstream.start();
···
import { DID, URL } from "./constants.js";
import fs from "node:fs";
import { Jetstream } from "@skyware/jetstream";
let intervalID: NodeJS.Timeout;
const cursorFile = fs.readFileSync("cursor.txt", "utf8");
+
if (cursorFile) console.log(`Initiate jetstream at cursor ${cursorFile}`);
const jetstream = new Jetstream({
endpoint: URL,
···
jetstream.on("open", () => {
intervalID = setInterval(() => {
+
if (!jetstream.cursor) return;
+
fs.writeFile("cursor.txt", jetstream.cursor.toString(), (err) => {
+
if (err) console.log(err);
+
});
}, 60000);
});
jetstream.on("error", (err) => console.error(err));
jetstream.on("close", () => clearInterval(intervalID));
jetstream.onCreate("app.bsky.feed.like", (event) => {
+
if (event.commit.record.subject.uri.includes(`${DID}/app.bsky.feed.post`))
+
label(event.did, event.commit.record.subject.uri.split("/").pop()!);
});
jetstream.start();