grain.social is a photo sharing platform built on atproto. grain.social
atproto photography appview
50
fork

Configure Feed

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

at ba7e272750c444d01409b0a48953fb8f2321169d 99 lines 2.6 kB view raw
1import { stringifyLex } from "npm:@atproto/lexicon"; 2import type { LabelRow } from "./main.ts"; 3import { 4 createConfig, 5 createDb, 6 createLabel, 7 createModService, 8 ModService, 9} from "./main.ts"; 10 11async function handleCreate( 12 args: string[], 13 cfg: Awaited<ReturnType<typeof createConfig>>, 14 modService: ModService, 15) { 16 const [src, uri, val, negArg] = args; 17 if (!src || !uri || !val) { 18 console.error("Usage: deno run -A bin.ts create <src> <uri> <val> [neg]"); 19 Deno.exit(1); 20 } 21 const neg = negArg === "true" || negArg === "1"; 22 const doCreateLabel = createLabel(cfg, modService); 23 await doCreateLabel({ 24 src, 25 uri, 26 val, 27 neg, 28 cts: new Date().toISOString(), 29 }); 30 console.log( 31 `Label created for src: ${src}, uri: ${uri}, val: ${val}, neg: ${neg}`, 32 ); 33} 34 35function parseQueryArgs(args: string[]) { 36 let src = ""; 37 let val = ""; 38 let limit = 50; 39 let cursor = 0; 40 const patterns: string[] = []; 41 let i = 0; 42 while (i < args.length) { 43 if (args[i] === "--src" && args[i + 1]) { 44 src = args[i + 1]; 45 i += 2; 46 continue; 47 } 48 if (args[i] === "--val" && args[i + 1]) { 49 val = args[i + 1]; 50 i += 2; 51 continue; 52 } 53 if (args[i] === "--limit" && args[i + 1]) { 54 limit = parseInt(args[i + 1], 10); 55 i += 2; 56 continue; 57 } 58 if (args[i] === "--cursor" && args[i + 1]) { 59 cursor = parseInt(args[i + 1], 10); 60 i += 2; 61 continue; 62 } 63 i++; 64 } 65 return { src, val, limit, cursor, patterns }; 66} 67 68function handleQuery(args: string[], modService: ModService) { 69 // Usage: deno run -A bin.ts query [--src <src>] [--val <val>] [--limit <n>] [--cursor <id>] 70 const { src, val, limit, cursor, patterns } = parseQueryArgs(args); 71 const sources = src ? [src] : []; 72 // If val is set, filter in JS after query 73 const { rows } = modService.getLabels({ patterns, sources, limit, cursor }); 74 const filtered = val ? rows.filter((r: LabelRow) => r.val === val) : rows; 75 for (const row of filtered) { 76 console.log(stringifyLex(row)); 77 } 78} 79 80async function main() { 81 const [cmd, ...args] = Deno.args; 82 if (!cmd || ["create", "query"].indexOf(cmd) === -1) { 83 console.error("Usage: deno run -A bin.ts <create|query> [...args]"); 84 Deno.exit(1); 85 } 86 const cfg = await createConfig(); 87 const db = createDb(cfg); 88 const modService = createModService(db); 89 90 if (cmd === "create") { 91 await handleCreate(args, cfg, modService); 92 } else if (cmd === "query") { 93 handleQuery(args, modService); 94 } 95} 96 97if (import.meta.main) { 98 main(); 99}