1package appview
2
3import (
4 "context"
5
6 "github.com/sethvargo/go-envconfig"
7)
8
9type CoreConfig struct {
10 CookieSecret string `env:"COOKIE_SECRET, default=00000000000000000000000000000000"`
11 DbPath string `env:"DB_PATH, default=appview.db"`
12 ListenAddr string `env:"LISTEN_ADDR, default=0.0.0.0:3000"`
13 AppviewHost string `env:"APPVIEW_HOST, default=https://tangled.sh"`
14 Dev bool `env:"DEV, default=false"`
15}
16
17type OAuthConfig struct {
18 Jwks string `env:"JWKS"`
19}
20
21type JetstreamConfig struct {
22 Endpoint string `env:"ENDPOINT, default=wss://jetstream1.us-east.bsky.network/subscribe"`
23}
24
25type ResendConfig struct {
26 ApiKey string `env:"API_KEY"`
27}
28
29type CamoConfig struct {
30 Host string `env:"HOST, default=https://camo.tangled.sh"`
31 SharedSecret string `env:"SHARED_SECRET"`
32}
33
34type AvatarConfig struct {
35 Host string `env:"HOST, default=https://avatar.tangled.sh"`
36 SharedSecret string `env:"SHARED_SECRET"`
37}
38
39type PosthogConfig struct {
40 ApiKey string `env:"API_KEY"`
41 Endpoint string `env:"ENDPOINT, default=https://eu.i.posthog.com"`
42}
43
44type Config struct {
45 Core CoreConfig `env:",prefix=TANGLED_"`
46 Jetstream JetstreamConfig `env:",prefix=TANGLED_JETSTREAM_"`
47 Resend ResendConfig `env:",prefix=TANGLED_RESEND_"`
48 Posthog PosthogConfig `env:",prefix=TANGLED_POSTHOG_"`
49 Camo CamoConfig `env:",prefix=TANGLED_CAMO_"`
50 Avatar AvatarConfig `env:",prefix=TANGLED_AVATAR_"`
51 OAuth OAuthConfig `env:",prefix=TANGLED_OAUTH_"`
52}
53
54func LoadConfig(ctx context.Context) (*Config, error) {
55 var cfg Config
56 err := envconfig.Process(ctx, &cfg)
57 if err != nil {
58 return nil, err
59 }
60
61 return &cfg, nil
62}