Auto-indexing service and GraphQL API for AT Protocol Records quickslice.slices.network/
atproto gleam graphql
at main 66 lines 2.1 kB view raw
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}