provider.go

 1// Package hyper provides a fantasy.Provider that proxies requests to Hyper.
 2package hyper
 3
 4import (
 5	"cmp"
 6	_ "embed"
 7	"encoding/json"
 8	"log/slog"
 9	"os"
10	"strconv"
11	"sync"
12
13	"charm.land/catwalk/pkg/catwalk"
14)
15
16//go:generate wget -O provider.json https://hyper.charm.land/api/v1/provider
17
18//go:embed provider.json
19var embedded []byte
20
21// Enabled returns true if hyper is enabled.
22var Enabled = sync.OnceValue(func() bool {
23	b, _ := strconv.ParseBool(
24		cmp.Or(
25			os.Getenv("HYPER"),
26			os.Getenv("HYPERCRUSH"),
27			os.Getenv("HYPER_ENABLE"),
28			os.Getenv("HYPER_ENABLED"),
29		),
30	)
31	return b
32})
33
34// Embedded returns the embedded Hyper provider.
35var Embedded = sync.OnceValue(func() catwalk.Provider {
36	var provider catwalk.Provider
37	if err := json.Unmarshal(embedded, &provider); err != nil {
38		slog.Error("Could not use embedded provider data", "err", err)
39	}
40	if e := os.Getenv("HYPER_URL"); e != "" {
41		provider.APIEndpoint = e + "/api/v1/fantasy"
42	}
43	return provider
44})
45
46const (
47	// Name is the default name of this meta provider.
48	Name = "hyper"
49	// defaultBaseURL is the default proxy URL.
50	defaultBaseURL = "https://hyper.charm.land"
51)
52
53// BaseURL returns the base URL, which is either $HYPER_URL or the default.
54var BaseURL = sync.OnceValue(func() string {
55	return cmp.Or(os.Getenv("HYPER_URL"), defaultBaseURL)
56})