wormhole-explorer/api/routes/wormscan/routes.go

135 lines
5.8 KiB
Go

package wormscan
import (
"time"
"github.com/gofiber/fiber/v2"
"github.com/gofiber/fiber/v2/middleware/cache"
"github.com/gofiber/fiber/v2/middleware/cors"
addrsvc "github.com/wormhole-foundation/wormhole-explorer/api/handlers/address"
govsvc "github.com/wormhole-foundation/wormhole-explorer/api/handlers/governor"
infrasvc "github.com/wormhole-foundation/wormhole-explorer/api/handlers/infrastructure"
obssvc "github.com/wormhole-foundation/wormhole-explorer/api/handlers/observations"
opsvc "github.com/wormhole-foundation/wormhole-explorer/api/handlers/operations"
relayssvc "github.com/wormhole-foundation/wormhole-explorer/api/handlers/relays"
trxsvc "github.com/wormhole-foundation/wormhole-explorer/api/handlers/transactions"
vaasvc "github.com/wormhole-foundation/wormhole-explorer/api/handlers/vaa"
"github.com/wormhole-foundation/wormhole-explorer/api/routes/wormscan/address"
"github.com/wormhole-foundation/wormhole-explorer/api/routes/wormscan/governor"
"github.com/wormhole-foundation/wormhole-explorer/api/routes/wormscan/infrastructure"
"github.com/wormhole-foundation/wormhole-explorer/api/routes/wormscan/observations"
"github.com/wormhole-foundation/wormhole-explorer/api/routes/wormscan/operations"
"github.com/wormhole-foundation/wormhole-explorer/api/routes/wormscan/relays"
"github.com/wormhole-foundation/wormhole-explorer/api/routes/wormscan/transactions"
"github.com/wormhole-foundation/wormhole-explorer/api/routes/wormscan/vaa"
"go.uber.org/zap"
)
var cacheConfig = cache.Config{
Next: func(c *fiber.Ctx) bool {
return c.Query("refresh") == "true"
},
Expiration: 1 * time.Second,
CacheControl: true,
StoreResponseHeaders: true,
}
// RegisterRoutes sets up the handlers for the Wormscan API.
func RegisterRoutes(
app *fiber.App,
rootLogger *zap.Logger,
addressService *addrsvc.Service,
vaaService *vaasvc.Service,
obsService *obssvc.Service,
governorService *govsvc.Service,
infrastructureService *infrasvc.Service,
transactionsService *trxsvc.Service,
relaysService *relayssvc.Service,
operationsService *opsvc.Service,
) {
// Set up controllers
addressCtrl := address.NewController(addressService, rootLogger)
vaaCtrl := vaa.NewController(vaaService, rootLogger)
observationsCtrl := observations.NewController(obsService, rootLogger)
governorCtrl := governor.NewController(governorService, rootLogger)
infrastructureCtrl := infrastructure.NewController(infrastructureService)
transactionCtrl := transactions.NewController(transactionsService, rootLogger)
relaysCtrl := relays.NewController(relaysService, rootLogger)
opsCtrl := operations.NewController(operationsService, rootLogger)
// Set up route handlers
api := app.Group("/api/v1")
api.Use(cors.New()) // TODO CORS restrictions?
// monitoring
api.Get("/health", infrastructureCtrl.HealthCheck)
api.Get("/ready", infrastructureCtrl.ReadyCheck)
api.Get("/version", infrastructureCtrl.Version)
// accounts resource
api.Get("/address/:id", addressCtrl.FindById)
// analytics, transactions, custom endpoints
api.Get("/global-tx/:chain/:emitter/:sequence", transactionCtrl.FindGlobalTransactionByID)
api.Get("/last-txs", transactionCtrl.GetLastTransactions)
api.Get("/scorecards", transactionCtrl.GetScorecards)
api.Get("/x-chain-activity", transactionCtrl.GetChainActivity)
api.Get("/top-assets-by-volume", transactionCtrl.GetTopAssets)
api.Get("/top-chain-pairs-by-num-transfers", transactionCtrl.GetTopChainPairs)
api.Get("token/:chain/:token_address", transactionCtrl.GetTokenByChainAndAddress)
api.Get("/transactions", transactionCtrl.ListTransactions)
api.Get("/transactions/:chain/:emitter/:sequence", transactionCtrl.GetTransactionByID)
// operations resource
operations := api.Group("/operations")
operations.Get("/", opsCtrl.FindAll)
operations.Get("/:chain/:emitter/:sequence", opsCtrl.FindById)
// vaas resource
vaas := api.Group("/vaas")
vaas.Use(cache.New(cacheConfig))
vaas.Get("/vaa-counts", vaaCtrl.GetVaaCount)
vaas.Get("/", vaaCtrl.FindAll)
vaas.Get("/:chain", vaaCtrl.FindByChain)
vaas.Get("/:chain/:emitter", vaaCtrl.FindByEmitter)
vaas.Get("/:chain/:emitter/:sequence", vaaCtrl.FindById)
vaas.Post("/parse", vaaCtrl.ParseVaa)
// oservations resource
observations := api.Group("/observations")
observations.Get("/", observationsCtrl.FindAll)
observations.Get("/:chain", observationsCtrl.FindAllByChain)
observations.Get("/:chain/:emitter", observationsCtrl.FindAllByEmitter)
observations.Get("/:chain/:emitter/:sequence", observationsCtrl.FindAllByVAA)
observations.Get("/:chain/:emitter/:sequence/:signer/:hash", observationsCtrl.FindOne)
// governor resources
governor := api.Group("/governor")
governorLimit := governor.Group("/limit")
governorLimit.Get("/", governorCtrl.GetGovernorLimit)
governorConfigs := governor.Group("/config")
governorConfigs.Get("/", governorCtrl.FindGovernorConfigurations)
governorConfigs.Get("/:guardian_address", governorCtrl.FindGovernorConfigurationByGuardianAddress)
governorStatus := governor.Group("/status")
governorStatus.Get("/", governorCtrl.FindGovernorStatus)
governorStatus.Get("/:guardian_address", governorCtrl.FindGovernorStatusByGuardianAddress)
governorNotional := governor.Group("/notional")
governorNotional.Get("/limit/", governorCtrl.FindNotionalLimit)
governorNotional.Get("/limit/:chain", governorCtrl.GetNotionalLimitByChainID)
governorNotional.Get("/available/", governorCtrl.GetAvailableNotional)
governorNotional.Get("/available/:chain", governorCtrl.GetAvailableNotionalByChainID)
governorNotional.Get("/max_available/:chain", governorCtrl.GetMaxNotionalAvailableByChainID)
enqueueVaas := governor.Group("/enqueued_vaas")
enqueueVaas.Get("/", governorCtrl.GetEnqueuedVaas)
enqueueVaas.Get("/:chain", governorCtrl.GetEnqueuedVaasByChainID)
relays := api.Group("/relays")
relays.Get("/:chain/:emitter/:sequence", relaysCtrl.FindOne)
}