this repo has no description
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

switch from queryLabels to db queries

+31 -33
+10
package-lock.json
··· 14 14 "dotenv": "^16.4.5" 15 15 }, 16 16 "devDependencies": { 17 + "@types/better-sqlite3": "^7.6.11", 17 18 "@types/node": "^20.14.10", 18 19 "typescript": "^5.5.3" 19 20 } ··· 524 525 "version": "13.2.2", 525 526 "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.2.2.tgz", 526 527 "integrity": "sha512-RWI+nyf0q64vyOxL8LbKtjJMki0sogRL/8axvklNtiTM0iFCVtHwME9w6+0P1/v4dQvsIg8A45oT3ka1t/M/+A==" 528 + }, 529 + "node_modules/@types/better-sqlite3": { 530 + "version": "7.6.11", 531 + "resolved": "https://registry.npmjs.org/@types/better-sqlite3/-/better-sqlite3-7.6.11.tgz", 532 + "integrity": "sha512-i8KcD3PgGtGBLl3+mMYA8PdKkButvPyARxA7IQAd6qeslht13qxb1zzO8dRCtE7U3IoJS782zDBAeoKiM695kg==", 533 + "dev": true, 534 + "dependencies": { 535 + "@types/node": "*" 536 + } 527 537 }, 528 538 "node_modules/@types/node": { 529 539 "version": "20.16.2",
+1
package.json
··· 7 7 "dev": "npx tsx --watch src/main.ts" 8 8 }, 9 9 "devDependencies": { 10 + "@types/better-sqlite3": "^7.6.11", 10 11 "@types/node": "^20.14.10", 11 12 "typescript": "^5.5.3" 12 13 },
-19
src/agent.ts
··· 1 - import { AtpAgent } from "@atproto/api"; 2 - import "dotenv/config"; 3 - 4 - export const getAgent = async () => { 5 - const agent = new AtpAgent({ 6 - service: process.env.BSKY_SERVICE ?? "https://bsky.social", 7 - }); 8 - 9 - await agent.login({ 10 - identifier: process.env.BSKY_IDENTIFIER!, 11 - password: process.env.BSKY_PASSWORD!, 12 - }); 13 - 14 - return agent; 15 - }; 16 - 17 - AtpAgent.configure({ 18 - appLabelers: [process.env.DID ?? ""], 19 - });
+20 -14
src/label.ts
··· 1 - import { AppBskyActorDefs } from "@atproto/api"; 1 + import { AppBskyActorDefs, ComAtprotoLabelDefs } from "@atproto/api"; 2 2 import { DID, PRONOUNS, SIGNING_KEY, URIs } from "./constants.js"; 3 3 import { LabelerServer } from "@skyware/labeler"; 4 - import { getAgent } from "./agent.js"; 4 + import Database from "better-sqlite3"; 5 5 6 6 const server = new LabelerServer({ did: DID, signingKey: SIGNING_KEY }); 7 - const agent = await getAgent(); 7 + 8 + const db = new Database("labels.db"); 9 + db.pragma("journal_mode = WAL"); 8 10 9 11 server.start(4001, (error, address) => { 10 12 if (error) { ··· 19 21 uri: string, 20 22 ) => { 21 23 const did = AppBskyActorDefs.isProfileView(subject) ? subject.did : subject; 22 - const labels = await agent.com.atproto.label 23 - .queryLabels({ sources: [server.did], uriPatterns: [did] }) 24 - .catch((err) => { 25 - console.log(err); 26 - }); 27 - if (!labels) return; 24 + 25 + const query = db 26 + .prepare< 27 + unknown[], 28 + ComAtprotoLabelDefs.Label 29 + >(`SELECT * FROM labels WHERE uri = ?`) 30 + .all(did); 31 + 32 + const labels = query.reduce((set, label) => { 33 + if (!label.neg) set.add(label.val); 34 + else set.delete(label.val); 35 + return set; 36 + }, new Set<string>()); 28 37 29 38 const post = URIs[uri]; 30 39 31 40 if (post?.includes("Like this post to delete")) { 32 41 await server 33 - .createLabels( 34 - { uri: did }, 35 - { negate: labels.data.labels.map((label) => label.val) }, 36 - ) 42 + .createLabels({ uri: did }, { negate: [...labels] }) 37 43 .catch((err) => { 38 44 console.log(err); 39 45 }) 40 46 .then(() => console.log(`Deleted labels for ${did}`)); 41 - } else if (labels.data.labels.length < 4 && PRONOUNS[post]) { 47 + } else if (labels.size < 4 && PRONOUNS[post]) { 42 48 await server 43 49 .createLabel({ 44 50 src: server.did,