Auto-indexing service and GraphQL API for AT Protocol Records
quickslice.slices.network/
atproto
gleam
graphql
1import database/executor.{type Executor}
2import database/repositories/config
3import database/repositories/lexicons
4import database/repositories/records
5import gleam/json
6import gleam/option.{None, Some}
7import gleam/result
8
9/// Get server capabilities
10pub fn get_server_capabilities(db: Executor) -> Result(json.Json, String) {
11 // Get counts for status
12 let lexicon_count =
13 lexicons.get_count(db)
14 |> result.unwrap(0)
15 let record_count =
16 records.get_count(db)
17 |> result.unwrap(0)
18
19 // Get config values using individual getters (handles env var precedence)
20 let relay_url = config.get_relay_url(db)
21 let jetstream_url = config.get_jetstream_url(db)
22 let plc_directory_url = config.get_plc_directory_url(db)
23 let oauth_supported_scopes = config.get_oauth_supported_scopes(db)
24 let admin_dids = config.get_admin_dids(db)
25 let domain_authority = case config.get(db, "domain_authority") {
26 Ok(value) -> Some(value)
27 Error(_) -> None
28 }
29
30 Ok(
31 json.object([
32 #("name", json.string("quickslice")),
33 #("version", json.string("0.1.0")),
34 #(
35 "features",
36 json.array(
37 ["graphql", "subscriptions", "oauth", "backfill", "lexicon_import"],
38 json.string,
39 ),
40 ),
41 #("protocols", json.array(["atproto"], json.string)),
42 #(
43 "status",
44 json.object([
45 #("recordCount", json.int(record_count)),
46 #("lexiconCount", json.int(lexicon_count)),
47 #("databaseConnected", json.bool(True)),
48 ]),
49 ),
50 #(
51 "config",
52 json.object([
53 #("relayUrl", json.string(relay_url)),
54 #("jetstreamUrl", json.string(jetstream_url)),
55 #("plcDirectoryUrl", json.string(plc_directory_url)),
56 #("oauthSupportedScopes", json.string(oauth_supported_scopes)),
57 #("adminDids", json.array(admin_dids, json.string)),
58 #("domainAuthority", case domain_authority {
59 Some(value) -> json.string(value)
60 None -> json.null()
61 }),
62 ]),
63 ),
64 ]),
65 )
66}