simple list of pds servers with open registration
1/** A PDS server as stored in the database */
2export type PdsServer = {
3 url: string;
4 first_seen: string;
5 last_seen: string;
6 last_enriched: string | null;
7 version: string | null;
8 pds_software: string | null;
9 did: string | null;
10 invite_code_required: boolean;
11 phone_verification: boolean;
12 user_domains: string[];
13 contact_email: string | null;
14 privacy_policy: string | null;
15 terms_of_service: string | null;
16 user_count: number | null;
17 country_code: string | null;
18 country_name: string | null;
19 ip_address: string | null;
20 is_open: boolean;
21 error_at: number | null;
22};
23
24/** Maps software ID to its latest version string */
25export type LatestVersionMap = Record<string, string>;
26
27/** Maps a version string to the software ID that uses it */
28export type VersionSoftwareMap = Record<string, string>;
29
30/** Raw PDS entry from mary-ext/atproto-scraping state.json */
31export type StatePdsEntry = {
32 inviteCodeRequired: boolean;
33 version: string;
34 errorAt?: number;
35};
36
37/** Shape of state.json from atproto-scraping */
38export type StateJson = {
39 pdses: Record<string, StatePdsEntry>;
40};
41
42/** Response from PDS describeServer endpoint */
43export type DescribeServerResponse = {
44 did: string;
45 availableUserDomains: string[];
46 inviteCodeRequired?: boolean;
47 phoneVerificationRequired?: boolean;
48 contact?: { email?: string };
49 links?: {
50 privacyPolicy?: string;
51 termsOfService?: string;
52 };
53};
54
55/** Response from PDS _health endpoint */
56export type HealthResponse = {
57 version?: string;
58};
59
60/** Response from dns.google resolve API */
61export type DnsResponse = {
62 Answer?: Array<{ data: string }>;
63};
64
65/** Single entry in ip-api.com batch response */
66export type GeoIpResult = {
67 status: string;
68 query: string;
69 country: string;
70 countryCode: string;
71};
72
73/** Server data passed into enrichment (includes cached DNS/geo) */
74export type ServerToEnrich = {
75 url: string;
76 ipAddress: string | null;
77 countryCode: string | null;
78 countryName: string | null;
79 lastEnriched: string | null;
80};
81
82/** Sort options for the directory listing */
83export type SortField = "trust";
84export type SortDirection = "desc";