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})