https://domlink.deployments.hotsocket.fyi/
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));