https://domlink.deployments.hotsocket.fyi/
at main 2.1 kB view raw
1import { Body, Button, Column, Input, Label, Row } from "./domlink.ts"; 2import { DidDocument } from "@atcute/identity"; 3 4let input_source_pds = [ 5 "pds.tgirl.cloud", 6 "pds.witchcraft.systems" 7]; 8let view_pds_accounts = new Row(); 9 10 11type listReposItem = { 12 active: boolean; 13 did: string; 14 head: string; 15 rev: string; 16}; 17type listReposResponse = { 18 cursor: string; 19 repos: [listReposItem]; 20}; 21type repoDescriptor = { 22 collections: [string]; 23 did: string; 24 didDoc: DidDocument; // would have crammed it in here but i dont really want to figure this out 25 handle: string; 26 handleIsCorrect: boolean; 27} 28 29async function xcall(host: string, method: string, params: Record<string, string | number> | null = null): Promise<unknown> { 30 let url = `https://${host}/xrpc/${method}`; 31 if (params) { 32 let usp = new URLSearchParams(); 33 for (let key in params) { 34 usp.append(key, params[key].toString()); 35 } 36 url += "?" + usp.toString(); 37 } 38 return await (await fetch(url)).json(); 39} 40 41async function listActiveUsers(host: string) { 42 let rsp = await xcall(host, "com.atproto.sync.listRepos", { 43 limit: 100 44 }) as listReposResponse; 45 let view_pds = new Column(); 46 view_pds.add(`=== ${host.toUpperCase()} ===`); 47 Body.add(view_pds); 48 rsp.repos.filter(x=>x.active).forEach(async repo=>{ 49 let view_pds_account = new Label(""); 50 let rsp = await xcall(host, "com.atproto.repo.describeRepo", { 51 repo: repo.did 52 }) as repoDescriptor; 53 if (!rsp.handleIsCorrect) { 54 rsp.handle += "⚠️ "; 55 } 56 view_pds_account.text += rsp.handle; 57 view_pds.add(view_pds_account); 58 }); 59 return view_pds; 60} 61 62 63let hostInput = new Input(); 64let last: any; 65let runButton = new Button("GO!",async ()=>{ 66 (runButton.wraps as HTMLButtonElement).disabled = true; 67 if (last) { 68 Body.delete(last); 69 } 70 try { 71 last = await listActiveUsers(hostInput.value); 72 } catch (e) { 73 last = new Label("Failed"); 74 Body.add(last); 75 } 76 console.log(last); 77 (runButton.wraps as HTMLButtonElement).disabled = false; 78}); 79Body.add(new Row().with( 80 "List 100 active users on PDS: ", 81 hostInput, 82 runButton 83));