everything you need to create an atproto appview
1package main
2
3import (
4 "context"
5 "net/http"
6 "os"
7
8 "tangled.org/oppi.li/atproto-starterkit/appview/config"
9 "tangled.org/oppi.li/atproto-starterkit/appview/server"
10 "tangled.org/oppi.li/atproto-starterkit/log"
11)
12
13func main() {
14 ctx := context.Background()
15 logger := log.New("appview")
16 ctx = log.IntoContext(ctx, logger)
17
18 c, err := config.LoadConfig(ctx)
19 if err != nil {
20 logger.Error("failed to load config", "error", err)
21 return
22 }
23
24 logger.Info("config loaded",
25 "dev", c.Core.Dev,
26 "host", c.Core.Host,
27 "listen_addr", c.Core.ListenAddr,
28 "db_path", c.Core.DbPath,
29 "redis_addr", c.Redis.Addr,
30 "plc_url", c.Plc.PLCURL,
31 "oauth_kid", c.OAuth.ClientKid,
32 )
33
34 srv, err := server.Make(ctx, c)
35 if err != nil {
36 logger.Error("failed to start appview", "err", err)
37 os.Exit(-1)
38 }
39
40 defer func() {
41 if err := srv.Close(); err != nil {
42 logger.Error("failed to close server", "err", err)
43 }
44 }()
45
46 logger.Info("starting server", "address", c.Core.ListenAddr)
47
48 if err := http.ListenAndServe(c.Core.ListenAddr, srv.Router()); err != nil {
49 logger.Error("failed to start appview", "err", err)
50 }
51}