api.go 854 Bytes
Newer Older
1 2 3
package api

import (
4
	"fmt"
Will Cory's avatar
Will Cory committed
5 6
	"net/http"

7
	"github.com/ethereum-optimism/optimism/indexer/api/routes"
Will Cory's avatar
Will Cory committed
8
	"github.com/ethereum-optimism/optimism/indexer/database"
9
	"github.com/ethereum/go-ethereum/log"
10
	"github.com/go-chi/chi/v5"
11 12
)

13
const ethereumAddressRegex = `^0x[a-fA-F0-9]{40}$`
14 15

type Api struct {
16
	Router *chi.Mux
17 18
}

19 20 21
func NewApi(bv database.BridgeTransfersView, logger log.Logger) *Api {
	logger.Info("Initializing API...")

22 23
	r := chi.NewRouter()

24
	h := routes.NewRoutes(logger, bv, r)
Hamdi Allam's avatar
Hamdi Allam committed
25

26
	api := &Api{Router: r}
27

28 29 30
	r.Get("/healthz", h.HealthzHandler)
	r.Get(fmt.Sprintf("/api/v0/deposits/{address:%s}", ethereumAddressRegex), h.L1DepositsHandler)
	r.Get(fmt.Sprintf("/api/v0/withdrawals/{address:%s}", ethereumAddressRegex), h.L2WithdrawalsHandler)
31

32
	return api
33 34
}

35 36
func (a *Api) Listen(port string) error {
	return http.ListenAndServe(port, a.Router)
37
}