mirror of
https://gitlab.com/pulsechaincom/prysm-pulse.git
synced 2024-12-25 21:07:18 +00:00
b114247836
* Move common gateway registration code to new package * no shared inside of beaconchain * beacon gateway Co-authored-by: prylabs-bulldozer[bot] <58059840+prylabs-bulldozer[bot]@users.noreply.github.com> Co-authored-by: Raul Jordan <raul@prysmaticlabs.com>
88 lines
2.6 KiB
Go
88 lines
2.6 KiB
Go
package gateway
|
|
|
|
import (
|
|
"net/http"
|
|
|
|
gwruntime "github.com/grpc-ecosystem/grpc-gateway/v2/runtime"
|
|
pbrpc "github.com/prysmaticlabs/prysm/proto/beacon/rpc/v1"
|
|
ethpbv1 "github.com/prysmaticlabs/prysm/proto/eth/v1"
|
|
ethpb "github.com/prysmaticlabs/prysm/proto/eth/v1alpha1"
|
|
"github.com/prysmaticlabs/prysm/shared/gateway"
|
|
"google.golang.org/protobuf/encoding/protojson"
|
|
)
|
|
|
|
// MuxConfig contains configuration that should be used when registering the beacon node in the gateway.
|
|
type MuxConfig struct {
|
|
Handler gateway.MuxHandler
|
|
V1PbMux gateway.PbMux
|
|
V1Alpha1PbMux gateway.PbMux
|
|
}
|
|
|
|
// DefaultConfig returns a fully configured MuxConfig with standard gateway behavior.
|
|
func DefaultConfig(enableDebugRPCEndpoints bool) MuxConfig {
|
|
v1Alpha1Registrations := []gateway.PbHandlerRegistration{
|
|
ethpb.RegisterNodeHandler,
|
|
ethpb.RegisterBeaconChainHandler,
|
|
ethpb.RegisterBeaconNodeValidatorHandler,
|
|
pbrpc.RegisterHealthHandler,
|
|
}
|
|
v1Registrations := []gateway.PbHandlerRegistration{
|
|
ethpbv1.RegisterBeaconNodeHandler,
|
|
ethpbv1.RegisterBeaconChainHandler,
|
|
ethpbv1.RegisterBeaconValidatorHandler,
|
|
ethpbv1.RegisterEventsHandler,
|
|
}
|
|
if enableDebugRPCEndpoints {
|
|
v1Alpha1Registrations = append(v1Alpha1Registrations, pbrpc.RegisterDebugHandler)
|
|
v1Registrations = append(v1Registrations, ethpbv1.RegisterBeaconDebugHandler)
|
|
|
|
}
|
|
v1Alpha1Mux := gwruntime.NewServeMux(
|
|
gwruntime.WithMarshalerOption(gwruntime.MIMEWildcard, &gwruntime.HTTPBodyMarshaler{
|
|
Marshaler: &gwruntime.JSONPb{
|
|
MarshalOptions: protojson.MarshalOptions{
|
|
EmitUnpopulated: true,
|
|
},
|
|
UnmarshalOptions: protojson.UnmarshalOptions{
|
|
DiscardUnknown: true,
|
|
},
|
|
},
|
|
}),
|
|
gwruntime.WithMarshalerOption(
|
|
"text/event-stream", &gwruntime.EventSourceJSONPb{},
|
|
),
|
|
)
|
|
v1Mux := gwruntime.NewServeMux(
|
|
gwruntime.WithMarshalerOption(gwruntime.MIMEWildcard, &gwruntime.HTTPBodyMarshaler{
|
|
Marshaler: &gwruntime.JSONPb{
|
|
MarshalOptions: protojson.MarshalOptions{
|
|
UseProtoNames: true,
|
|
EmitUnpopulated: true,
|
|
},
|
|
UnmarshalOptions: protojson.UnmarshalOptions{
|
|
DiscardUnknown: true,
|
|
},
|
|
},
|
|
}),
|
|
)
|
|
muxHandler := func(h http.Handler, w http.ResponseWriter, req *http.Request) {
|
|
h.ServeHTTP(w, req)
|
|
}
|
|
v1Alpha1PbHandler := gateway.PbMux{
|
|
Registrations: v1Alpha1Registrations,
|
|
Patterns: []string{"/eth/v1alpha1/"},
|
|
Mux: v1Alpha1Mux,
|
|
}
|
|
v1PbHandler := gateway.PbMux{
|
|
Registrations: v1Registrations,
|
|
Patterns: []string{"/eth/v1/"},
|
|
Mux: v1Mux,
|
|
}
|
|
|
|
return MuxConfig{
|
|
Handler: muxHandler,
|
|
V1PbMux: v1PbHandler,
|
|
V1Alpha1PbMux: v1Alpha1PbHandler,
|
|
}
|
|
}
|