Files
next.orly.dev/pkg/protocol/relayinfo/fetch.go
mleku 110223fc4e Migrate internal module imports to unified package path.
Replaced legacy `*.orly` module imports with `next.orly.dev/pkg` paths across the codebase for consistency. Removed legacy `go.mod` files from sub-packages, consolidating dependency management. Added Dockerfiles and configurations for benchmarking environments.
2025-09-12 16:12:31 +01:00

49 lines
1.0 KiB
Go

package relayinfo
import (
"context"
"encoding/json"
"io"
"net/http"
"time"
"lol.mleku.dev/chk"
"lol.mleku.dev/errorf"
"next.orly.dev/pkg/utils/normalize"
)
// Fetch fetches the NIP-11 Info.
func Fetch(c context.Context, u []byte) (info *T, err error) {
if _, ok := c.Deadline(); !ok {
// if no timeout is set, force it to 7 seconds
var cancel context.CancelFunc
c, cancel = context.WithTimeout(c, 7*time.Second)
defer cancel()
}
u = normalize.URL(u)
var req *http.Request
if req, err = http.NewRequestWithContext(
c, http.MethodGet, string(u), nil,
); chk.E(err) {
return
}
// add the NIP-11 header
req.Header.Add("Accept", "application/nostr+json")
// send the response
var resp *http.Response
if resp, err = http.DefaultClient.Do(req); chk.E(err) {
err = errorf.E("request failed: %w", err)
return
}
defer chk.E(resp.Body.Close())
var b []byte
if b, err = io.ReadAll(resp.Body); chk.E(err) {
return
}
info = &T{}
if err = json.Unmarshal(b, info); chk.E(err) {
return
}
return
}