@@ -29,6 +29,7 @@ import (
2929 "sync"
3030 "time"
3131
32+ "github.com/berachain/beacon-kit/log"
3233 "github.com/berachain/beacon-kit/primitives/encoding/json"
3334 beaconhttp "github.com/berachain/beacon-kit/primitives/net/http"
3435 "github.com/berachain/beacon-kit/primitives/net/jwt"
@@ -37,6 +38,7 @@ import (
3738var _ Client = (* client )(nil )
3839
3940type Client interface {
41+ Initialize () error
4042 Start (context.Context )
4143 Call (ctx context.Context , target any , method string , params ... any ) error
4244 Close () error
@@ -56,6 +58,8 @@ type client struct {
5658 // jwtRefreshInterval is the interval at which the JWT token should be
5759 // refreshed.
5860 jwtRefreshInterval time.Duration
61+ // logger is the logger for the RPC client.
62+ logger log.Logger
5963
6064 // mu protects header for concurrent access.
6165 mu sync.RWMutex
@@ -69,6 +73,7 @@ func NewClient(
6973 url string ,
7074 secret * jwt.Secret ,
7175 jwtRefreshInterval time.Duration ,
76+ logger log.Logger ,
7277) Client {
7378 rpc := & client {
7479 url : url ,
@@ -84,6 +89,7 @@ func NewClient(
8489 jwtSecret : secret ,
8590 jwtRefreshInterval : jwtRefreshInterval ,
8691 header : http.Header {"Content-Type" : {"application/json" }},
92+ logger : logger ,
8793 }
8894
8995 return rpc
@@ -94,22 +100,30 @@ func (rpc *client) Start(ctx context.Context) {
94100 ticker := time .NewTicker (rpc .jwtRefreshInterval )
95101 defer ticker .Stop ()
96102
97- if err := rpc .updateHeader (); err != nil {
98- panic (err )
99- }
103+ // Initial JWT update is done in Initialize() now
100104 for {
101105 select {
102106 case <- ctx .Done ():
103107 return
104108 case <- ticker .C :
105109 if err := rpc .updateHeader (); err != nil {
106- // TODO: log or something.
110+ rpc . logger . Error ( "Failed to refresh JWT token" , "error" , err )
107111 continue
108112 }
109113 }
110114 }
111115}
112116
117+ // Initialize sets up the initial JWT token. This should be called before
118+ // making any RPC calls to ensure a fresh token is available.
119+ func (rpc * client ) Initialize () error {
120+ rpc .logger .Info ("Initializing RPC client with fresh JWT token" )
121+ if err := rpc .updateHeader (); err != nil {
122+ return fmt .Errorf ("failed to initialize JWT token: %w" , err )
123+ }
124+ return nil
125+ }
126+
113127// Close closes the RPC client.
114128func (rpc * client ) Close () error {
115129 rpc .client .CloseIdleConnections ()
0 commit comments