mirror of
https://github.com/OffchainLabs/prysm.git
synced 2026-01-08 07:03:58 -05:00
* Allow custom headers in validator client HTTP requests * changelog <3 * improve flag description * Bastin's review * James' review * add godoc for NodeConnectionOption
79 lines
2.0 KiB
Go
79 lines
2.0 KiB
Go
package helpers
|
|
|
|
import (
|
|
"time"
|
|
|
|
"google.golang.org/grpc"
|
|
)
|
|
|
|
// Use an interface with a private dummy function to force all other packages to call NewNodeConnection
|
|
type NodeConnection interface {
|
|
GetGrpcClientConn() *grpc.ClientConn
|
|
GetBeaconApiUrl() string
|
|
GetBeaconApiHeaders() map[string][]string
|
|
setBeaconApiHeaders(map[string][]string)
|
|
GetBeaconApiTimeout() time.Duration
|
|
setBeaconApiTimeout(time.Duration)
|
|
dummy()
|
|
}
|
|
|
|
type nodeConnection struct {
|
|
grpcClientConn *grpc.ClientConn
|
|
beaconApiUrl string
|
|
beaconApiHeaders map[string][]string
|
|
beaconApiTimeout time.Duration
|
|
}
|
|
|
|
// NodeConnectionOption is a functional option for configuring the node connection.
|
|
type NodeConnectionOption func(nc NodeConnection)
|
|
|
|
// WithBeaconApiHeaders sets the HTTP headers that should be sent to the server along with each request.
|
|
func WithBeaconApiHeaders(headers map[string][]string) NodeConnectionOption {
|
|
return func(nc NodeConnection) {
|
|
nc.setBeaconApiHeaders(headers)
|
|
}
|
|
}
|
|
|
|
// WithBeaconApiTimeout sets the HTTP request timeout.
|
|
func WithBeaconApiTimeout(timeout time.Duration) NodeConnectionOption {
|
|
return func(nc NodeConnection) {
|
|
nc.setBeaconApiTimeout(timeout)
|
|
}
|
|
}
|
|
|
|
func (c *nodeConnection) GetGrpcClientConn() *grpc.ClientConn {
|
|
return c.grpcClientConn
|
|
}
|
|
|
|
func (c *nodeConnection) GetBeaconApiUrl() string {
|
|
return c.beaconApiUrl
|
|
}
|
|
|
|
func (c *nodeConnection) GetBeaconApiHeaders() map[string][]string {
|
|
return c.beaconApiHeaders
|
|
}
|
|
|
|
func (c *nodeConnection) setBeaconApiHeaders(headers map[string][]string) {
|
|
c.beaconApiHeaders = headers
|
|
}
|
|
|
|
func (c *nodeConnection) GetBeaconApiTimeout() time.Duration {
|
|
return c.beaconApiTimeout
|
|
}
|
|
|
|
func (c *nodeConnection) setBeaconApiTimeout(timeout time.Duration) {
|
|
c.beaconApiTimeout = timeout
|
|
}
|
|
|
|
func (*nodeConnection) dummy() {}
|
|
|
|
func NewNodeConnection(grpcConn *grpc.ClientConn, beaconApiUrl string, opts ...NodeConnectionOption) NodeConnection {
|
|
conn := &nodeConnection{}
|
|
conn.grpcClientConn = grpcConn
|
|
conn.beaconApiUrl = beaconApiUrl
|
|
for _, opt := range opts {
|
|
opt(conn)
|
|
}
|
|
return conn
|
|
}
|