Pronouns labels on Bluesky
1import { DID, PORT, MAXLABELS, POSTS, SIGN_KEY, DELETE } from "./constants.js";
2import { LabelerServer } from "@skyware/labeler";
3
4const server = new LabelerServer({ did: DID, signingKey: SIGN_KEY });
5server.start(PORT, (error, address) => {
6 if (error) console.error(error);
7 else console.log(`Labeler server listening on ${address}`);
8});
9
10export const label = async (did: string, rkey: string) => {
11 const query = await server.db.execute({
12 sql: "SELECT val, neg FROM labels WHERE uri = ?",
13 args: [did],
14 });
15
16 const labels = query.rows.reduce((set, label) => {
17 if (!label.neg) set.add(label.val!.toString());
18 else set.delete(label.val!.toString());
19 return set;
20 }, new Set<string>());
21
22 try {
23 if (rkey.includes(DELETE)) {
24 await server.createLabels({ uri: did }, { negate: [...labels] });
25 console.log(`${new Date().toISOString()} Deleted labels: ${did}`);
26 } else if (labels.size < MAXLABELS && POSTS[rkey]) {
27 await server.createLabel({ uri: did, val: POSTS[rkey] });
28 console.log(`${new Date().toISOString()} Labeled ${did}: ${POSTS[rkey]}`);
29 }
30 } catch (err) {
31 console.error(err);
32 }
33};