package app import ( "encoding/json" "net/http" "sort" "lol.mleku.dev/chk" "lol.mleku.dev/log" "next.orly.dev/pkg/version" "protocol.orly/relayinfo" ) // HandleRelayInfo generates and returns a relay information document in JSON // format based on the server's configuration and supported NIPs. // // # Parameters // // - w: HTTP response writer used to send the generated document. // // - r: HTTP request object containing incoming client request data. // // # Expected Behaviour // // The function constructs a relay information document using either the // Informer interface implementation or predefined server configuration. It // returns this document as a JSON response to the client. func (s *Server) HandleRelayInfo(w http.ResponseWriter, r *http.Request) { r.Header.Set("Content-Type", "application/json") log.D.Ln("handling relay information document") var info *relayinfo.T supportedNIPs := relayinfo.GetList( relayinfo.BasicProtocol, // relayinfo.Authentication, // relayinfo.EncryptedDirectMessage, // relayinfo.EventDeletion, relayinfo.RelayInformationDocument, // relayinfo.GenericTagQueries, // relayinfo.NostrMarketplace, // relayinfo.EventTreatment, // relayinfo.CommandResults, // relayinfo.ParameterizedReplaceableEvents, // relayinfo.ExpirationTimestamp, // relayinfo.ProtectedEvents, // relayinfo.RelayListMetadata, ) if s.Config.ACLMode != "none" { supportedNIPs = relayinfo.GetList( relayinfo.BasicProtocol, relayinfo.Authentication, // relayinfo.EncryptedDirectMessage, // relayinfo.EventDeletion, relayinfo.RelayInformationDocument, // relayinfo.GenericTagQueries, // relayinfo.NostrMarketplace, // relayinfo.EventTreatment, // relayinfo.CommandResults, // relayinfo.ParameterizedReplaceableEvents, // relayinfo.ExpirationTimestamp, // relayinfo.ProtectedEvents, // relayinfo.RelayListMetadata, ) } sort.Sort(supportedNIPs) log.T.Ln("supported NIPs", supportedNIPs) info = &relayinfo.T{ Name: s.Config.AppName, Description: version.Description, Nips: supportedNIPs, Software: version.URL, Version: version.V, Limitation: relayinfo.Limits{ AuthRequired: s.Config.ACLMode != "none", RestrictedWrites: s.Config.ACLMode != "none", }, Icon: "https://cdn.satellite.earth/ac9778868fbf23b63c47c769a74e163377e6ea94d3f0f31711931663d035c4f6.png", } if err := json.NewEncoder(w).Encode(info); chk.E(err) { } }